xen*_*ndi 31 mysql join unique duplicates
到目前为止,我似乎无法弄清楚这一点.我试图连接两个表,只选择表A中没有表B中匹配列的行.例如,假设我们有一个用户表和一个已发送的表.
userstable包含以下列:id, username
senttable包含以下列:id, username
我想选择的所有行users,其中username在不存在的sent表.所以,如果tom是在users和sent他不会被选中.如果他在users但不在,sent他将被选中.我尝试了这个,但它根本不起作用:
SELECT pooltest.name,senttest.sentname
FROM pooltest,senttest
WHERE pooltest.name != senttest.sentname
Run Code Online (Sandbox Code Playgroud)
Lie*_*ers 59
通常,您将使用NOT EXISTS此类查询
SELECT p.Name
FROM pooltest p
WHERE NOT EXISTS (SELECT s.Name
FROM senttest s
WHERE s.Name = p.Name)
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用a LEFT OUTER JOIN并检查NULL
SELECT p.Name
FROM pooltest p
LEFT OUTER JOIN senttest s ON s.Name = p.Name
WHERE s.Name IS NULL
Run Code Online (Sandbox Code Playgroud)
请注意,您使用的隐式连接语法被认为是过时的,应该用显式连接替换.
小智 20
试试这个SQL:
SELECT users.username
FROM users
LEFT JOIN sent ON sent.username = users.username
WHERE sent.username IS NULL;
Run Code Online (Sandbox Code Playgroud)
我认为更好的方法是:
SELECT users.username
FROM users
LEFT JOIN sent ON sent.id = users.id
WHERE sent.id IS NULL;
Run Code Online (Sandbox Code Playgroud)
因为两个id字段都会被索引(我会想到主键)所以这个查询会比我建议的第一个更优化.
但是,您可能会发现我的第一个建议更适合您,这取决于您对应用程序的要求.
| 归档时间: |
|
| 查看次数: |
52261 次 |
| 最近记录: |