Heim  >  Fragen und Antworten  >  Hauptteil

Der umgeschriebene Titel lautet: MySQL-Abfrageanweisungen, die für die Datenbereinigung geeignet sind

<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>
P粉413704245P粉413704245413 Tage vor533

Antworte allen(1)Ich werde antworten

  • P粉546179835

    P粉5461798352023-09-04 14:09:32

    这个查询应该可以工作:

    delete from routes where concat (slat,'|', slng) not in (
      select concat(lat ,'|', lng) from sites 
      union  select concat(lat,'|',lng) from fse
    ) ;

    它从表sitesfse中选择所有记录,并删除在子查询中找不到记录的routes表中的行。需要使用两列的concat,因为in只能处理一列。|只是用来分隔值的。

    DB-Fiddle

    Antwort
    0
  • StornierenAntwort