Mysql 查询联接
Mysql Query On Joins
我有两张桌子
表 1
SNO RECEIVER USER1 USER2
1 133 44 45
2 144 66 77
3 155 77 33
和
TABLE 2
RECEIVER USER
133 44
133 45
144 88
144 55
155 77
必填:
从 table1 中删除所有在 table2
中没有匹配条目的行
示例
2 144 66 77
应该删除
因为 table2
上没有 144 66 行
155 33
我试过了,但没用
从 TABLE1 A LEFT JOIN TABLE2 B ON (A.RECEIVER=B.RECEIVER AND A.USER1=B.USER) AND B.USER IS NULL 中删除;
您也可以在 DELETE 语句中使用 JOIN。以下语句连接(使用左连接!)两个 tables,从 table 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,尤其是 "Multi-Table Deletes" 部分。
为什么需要 JOIN
来做这个,而是使用 SUB-QUERY
DELETE FROM table1
WHERE receiver NOT IN ( SELECT DISTINCT (receiver) FROM table2 )
AND user1 NOT IN ( SELECT DISTINCT (user) FROM table2 );
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 中的用户相同。如果不是这种情况,可以修改查询。
诸如此类:
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 个表,并且 select 仅那些没有匹配记录的记录(left join
和 select 来自 table1 的所有记录,而 WHERE t2.receiver IS NULL
将 select 只有那些在表 2 中没有匹配记录的人)
现在你可以做
delete from table1 where sno IN (__PASTE_ABOVE_QUERY__);
我有两张桌子
表 1
SNO RECEIVER USER1 USER2
1 133 44 45
2 144 66 77
3 155 77 33
和
TABLE 2
RECEIVER USER
133 44
133 45
144 88
144 55
155 77
必填: 从 table1 中删除所有在 table2
中没有匹配条目的行示例
2 144 66 77
应该删除 因为 table2
上没有 144 66 行155 33
我试过了,但没用 从 TABLE1 A LEFT JOIN TABLE2 B ON (A.RECEIVER=B.RECEIVER AND A.USER1=B.USER) AND B.USER IS NULL 中删除;
您也可以在 DELETE 语句中使用 JOIN。以下语句连接(使用左连接!)两个 tables,从 table 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,尤其是 "Multi-Table Deletes" 部分。
为什么需要 JOIN
来做这个,而是使用 SUB-QUERY
DELETE FROM table1
WHERE receiver NOT IN ( SELECT DISTINCT (receiver) FROM table2 )
AND user1 NOT IN ( SELECT DISTINCT (user) FROM table2 );
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 中的用户相同。如果不是这种情况,可以修改查询。
诸如此类:
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 个表,并且 select 仅那些没有匹配记录的记录(left join
和 select 来自 table1 的所有记录,而 WHERE t2.receiver IS NULL
将 select 只有那些在表 2 中没有匹配记录的人)
现在你可以做
delete from table1 where sno IN (__PASTE_ABOVE_QUERY__);