2015-04-25 35 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__);