SQL LEFT JOIN where 子句与 IN 比较
SQL LEFT JOIN where clause with IN comparison
可能无意中发现了一道很好的SQL试题。
- 我有一个 table 假设有 ~100 个用户名。
- 我有一组 10 个可能的用户名 { aname, bname, cname, dname, ... }
如果我这样做:
SELECT user.username FROM user WHERE user.username IN ('aname', 'bname', 'cname',...);
我得到了一个用户名列表,减去了 table 中找不到的用户名,盛大。
我真正想要的是 table.
中未找到的列表
如果 WHERE...IN
子句列表是 table,我只是 LEFT JOIN
将其发送给用户 table 并过滤 NULLs
。
有没有一种方法可以在不创建临时 table 并将其加入用户 table 的情况下执行此操作?我想,有点像用户 table 到 WHERE...IN
子句的左连接?
我从未做过或见过它,但也许它存在。
您可以使用派生的 table 和 left join
:
SELECT l.name
FROM (SELECT 'aname' as name UNION ALL
SELECT 'bname' UNION ALL
SELECT 'cname' UNION ALL
. . .
) l LEFT JOIN
user u
ON u.username = l.name
WHERE u.username IS NULL
可能无意中发现了一道很好的SQL试题。
- 我有一个 table 假设有 ~100 个用户名。
- 我有一组 10 个可能的用户名 { aname, bname, cname, dname, ... }
如果我这样做:
SELECT user.username FROM user WHERE user.username IN ('aname', 'bname', 'cname',...);
我得到了一个用户名列表,减去了 table 中找不到的用户名,盛大。
我真正想要的是 table.
中未找到的列表如果 WHERE...IN
子句列表是 table,我只是 LEFT JOIN
将其发送给用户 table 并过滤 NULLs
。
有没有一种方法可以在不创建临时 table 并将其加入用户 table 的情况下执行此操作?我想,有点像用户 table 到 WHERE...IN
子句的左连接?
我从未做过或见过它,但也许它存在。
您可以使用派生的 table 和 left join
:
SELECT l.name
FROM (SELECT 'aname' as name UNION ALL
SELECT 'bname' UNION ALL
SELECT 'cname' UNION ALL
. . .
) l LEFT JOIN
user u
ON u.username = l.name
WHERE u.username IS NULL