SQL LEFT JOIN where 子句与 IN 比较

SQL LEFT JOIN where clause with IN comparison

可能无意中发现了一道很好的SQL试题。

如果我这样做:

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