2012-10-01 38 views
1
table1 
refno status 
1  A 
2  A 
6  A 
3  A 

table2 
refno itemcode qty 
1  1  5 
1  2  0 
3  8  0 
3  1  0 
2  4  3 
6  7  0 

我需要一個查詢,將刪除[表2]認爲數量= 0所有行同時將在[表1]刪除行如果查詢,將刪除table1的記錄,如果引用不是在表2中

table1 
refno status 
1  A 
2  A 

table2 
refno itemcode qty 
1  1  5 
2  4  3 

由於

+0

@MahmoudGamal - MySQL有一個[多表中刪除語法(http://dev.mysql.com/ DOC/refman/5.6/EN/delete.html) –

回答

0

下面的查詢將DELETE所有錄音功:[引用號]未在[表2]

鑑於上述例子中,該查詢應保留下面的輸出發現ds從這兩個表中刪除:

DELETE t1.*, t2.* 
FROM Table t1 
LEFT JOIN 
(
    SELECT * 
    FROM Table2 
    WHERE qty = 0 
) t2 ON t1.refno = t2.refno 
WHERE t2.refno IS NULL 
0

您可以在事務中編寫2條刪除語句以確保其具有原子操作。

0

與MySQL,因爲多表中刪除被允許

delete t1, t2 
from table1 t1 
left join table2 t2 on t1.refno = t2.refno 
where t2.qty = 0 or t2.refno is null; 

但這會從表1中刪除行1, A(因爲我們已經有了在T2,其中refno = 1qty = 0的關係)

我沒有看到一個解決方案(可能會有)將從表2中的行1, 2, 0將被刪除,並且將不會從表1中的行1, A

所以,我認爲解決的辦法必須是一個存儲過程(或2個查詢)

create procedure CleanTable1Table2() 
begin 
    delete from table2 t2 
    where qty = 0; 

    delete from table1 t1 
    where not exists (select null from table2 t2 
        where t2.refno= t1.refno); 
end 
相關問題