cari

Rumah  >  Soal Jawab  >  teks badan

Padam daripada berbilang jadual dalam satu kenyataan

<p>Menggunakan MySQL, saya cuba memadamkan berbilang rekod daripada berbilang jadual sekaligus. Pada mulanya saya fikir saya boleh melakukan ini: </p> <pre class="brush:php;toolbar:false;">PADAM t1, t2 DARI jadual1 t1 SERTAI jadual2 t2 PADA t1.id = t2.table1_id SERTAI jadual3 t3 PADA t1.id = t3.table1_id DI MANA t1.id DALAM (?,?,?,?);</pre> <p>Namun, jika tiada rekod sedia ada dalam jadual2, patutkah saya menukar <strong>JOIN</strong> kepada <strong>LEFT JOIN</strong>? Selain itu, jika saya memadamkan hanya dua atau tiga rekod daripada lapan jadual (2x2x2x2x2x2x2x2), adakah ini akan menyebabkan kelewatan? </p>
P粉716228245P粉716228245497 hari yang lalu552

membalas semua(1)saya akan balas

  • P粉118698740

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

    Ya, akan jadi table2上的连接改为left join会实现您想要的效果。属于列表和table3table1中的行都将被删除,无论它们是否也存在于table2. Pada masa yang sama, kemungkinan baris yang sepadan juga akan dipadamkan.

    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 (?, ?, ?, ?);

    Saya mengesyorkan bahawa jika terdapat indeks pada 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)

    balas
    0
  • Batalbalas