Der umgeschriebene Titel lautet: MySQL-Abfrageanweisungen, die für die Datenbereinigung geeignet sind
P粉413704245
2023-09-03 18:23:21
<p>Ich habe drei Tische. Eine Tabelle ist eine Reiseentfernungstabelle</p>
<pre class="brush:php;toolbar:false;">Tabellenrouten erstellen
(
Latte int,
slng int,
dlat int,
dlng int,
Abstand int
);</pre>
<p>Eine Tabelle ist eine Site-Tabelle</p>
<pre class="brush:php;toolbar:false;">Tabellenseiten erstellen
(
id int,
Name varchar(100),
Latein int,
lng int
);</pre>
<p>Es gibt auch einen Tisch für Techniker</p>
<pre class="brush:php;toolbar:false;">Tabelle fse erstellen
(
id int,
Name varchar(100),
Latein int,
lng int
);</pre>
<p>Die Reiseentfernungstabelle wird dynamisch über Google API-Anfragen gefüllt. Wenn es also neue Haltestellen oder neue Techniker gibt, werden alle neuen Fahrtstrecken über Google abgefragt und in der Routentabelle gespeichert. </p>
<p>Natürlich kann es auch vorkommen, dass ein Kunde oder Techniker abreist. In diesem Fall bleiben die Einträge der Distanztabelle auch dann in der Datenbank erhalten, wenn sie nicht mehr verwendet werden. </p>
<p>Ich möchte diese nicht verwendeten Zeilen in der Tabelle löschen. Ich suche also nach einer Abfrage, die alle „nicht vorhandenen“ Breiten-/Längengradkombinationen in der Tabelle „Standorte/Techniker“ entfernen kann, wie in den Kommentaren dieser Geige</p> geschrieben.
<p>https://www.db-fiddle.com/f/mwF1iyZ7nn8rnDcE8Wstch/0</p>
<p>Ich könnte diese Abfrage selbst schreiben, aber meine einzige Lösung besteht darin, eine sehr große Anzahl von Unterabfragen zu verwenden. Aber ich frage mich, ob es einen effizienteren Weg gibt und hoffentlich können die SQL-Experten hier helfen? </p>
这个查询应该可以工作:
它从表
sites
和fse
中选择所有记录,并删除在子查询中找不到记录的routes表中的行。需要使用两列的concat,因为in
只能处理一列。|
只是用来分隔值的。DB-Fiddle