suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Aus mehreren Tabellen in einer Anweisung löschen

<p>Mit MySQL versuche ich, mehrere Datensätze aus mehreren Tabellen gleichzeitig zu löschen. Zuerst dachte ich, ich könnte das machen: </p> <pre class="brush:php;toolbar:false;">LÖSCHEN t1, t2 VON Tabelle1 t1 JOIN table2 t2 ON t1.id = t2.table1_id JOIN table3 t3 ON t1.id = t3.table1_id WHERE t1.id IN (?,?,?,?);</pre> <p>Wenn in Tabelle2 jedoch keine Datensätze vorhanden sind, sollte ich dann <strong>JOIN</strong> in <strong>LEFT JOIN</strong> ändern? Wenn ich nur zwei oder drei Datensätze aus den acht Tabellen (2x2x2x2x2x2x2x2) lösche, führt dies dann zu einer Verzögerung? </p>
P粉716228245P粉716228245462 Tage vor527

Antworte allen(1)Ich werde antworten

  • P粉118698740

    P粉1186987402023-08-19 00:06:31

    是的,将table2上的连接改为left join会实现您想要的效果。属于列表和table3table1中的行都将被删除,无论它们是否也存在于table2中。同时,可能的匹配行也将被删除。

    delete t1, t2
    from table1 t1
    left join table2 t2 on t1.id = t2.table1_id
    inner join table3 t3 on t1.id = t3.table1_id
    where t1.id in (?, ?, ?, ?);

    我建议将table3上的join重写为exists条件。这样可以更明确地表达查询的意图,并且可能性能更好,特别是如果在table3(table1_id)上有索引的话:

    delete t1, t2
    from table1 t1
    left join table2 t2 on t1.id = t2.table1_id
    where 
        t1.id in (?, ?, ?, ?)
        and exists (select 1 from table3 t3 where t3.table1_id = t1.id)

    Antwort
    0
  • StornierenAntwort