2015-04-25 58 views
-1

我有兩個表MySQL查詢在加入

表1

 SNO RECEIVER USER1 USER2 
     1 133  44 45 
     2 144  66 77 
     3 155  77 33 

表2

 RECEIVER USER 
    133  44 
    133  45 
    144  88 
    144  55 
    155  77 

要求: 從沒有匹配table1中刪除所有行進入表2

例如

 2 144  66 77 

建議立即進行刪除被刪除 因爲有144 66對錶2的沒有排

我嘗試,但其不工作 DELETE FROM TABLE1左連接TABLE2 B開(A.RECEIVER = B.RECEIVER和A.USER1 = B.USER)和B.USER爲NULL;

+0

我知道加入但這似乎太硬 – Shakini

回答

1

您也可以在DELETE語句中使用JOIN。下面的語句連接(使用左連接!)的兩個表中選擇具有從表2中沒有相應的記錄結果行(WHERE ...),並從t1刪除各行:

DELETE t1 
FROM t1 LEFT JOIN t2 ON (t1.RECEIVER = t2.RECEIVER AND t1.USER1 = t2.USER) 
WHERE t2.RECEIVER IS NULL 

manual僅供參考,特別是「多表刪除」部分。

0

爲什麼需要JOIN要做到這一點,而使用SUB-QUERY

DELETE FROM table1 
    WHERE receiver NOT IN (SELECT DISTINCT (receiver) FROM table2) 
    AND user1 NOT IN (SELECT DISTINCT (user) FROM table2); 
0
Delete * from Table1 
Where not exists (select 1 from Table2 where 
RECEIVER = Table1.RECEIVER and (user = Table1.user1 or user = Table1.user2)) 

明確什麼是不匹配的意思。你認爲什麼搭配?在我上面的答案中,我假定匹配意味着相同的接收者,並且user1或user2與表2中的用戶相同。如果不是這種情況,可以修改查詢。

0

某物像:

SELECT t1.sno FROM table1 t1 LEFT JOIN table2 t2 ON t1.receiver = t2.receiver and 2.user = t1.user1 WHERE t2.receiver IS NULL; 

上述查詢由接收機和用戶列聯接的那些2個表和僅選擇那些記錄在沒有匹配的記錄(left join與選擇從表1中的所有記錄,同時WHERE t2.receiver IS NULL將只選擇那些即沒有必須在表2匹配的記錄)

現在你可以做

delete from table1 where sno IN (__PASTE_ABOVE_QUERY__);