SQL LEFT JOIN与IN比较的where子句

问题描述:

可能无意中偶然发现了一个很好的SQL测试问题。SQL LEFT JOIN与IN比较的where子句

  • 我有一个表让我们说~100个用户名。
  • 我有一组10个可能的用户名{aname,BNAME,CNAME,DNAME,...}

如果我做的:

SELECT user.username FROM user WHERE user.username IN ('aname', 'bname', 'cname',...); 

我获得选择一个用户名列表,减去表中未找到的那些,隆重。

我真正想要的是没有在表格中找到的列表。

如果WHERE...IN子句列表是一个表,我只是LEFT JOIN它到用户表和筛选NULLs

有没有办法做到这一点,而不做一个临时表,并将其加入到用户表中?我猜,用户表的左连接与WHERE...IN子句有关?

我从来没有做过或看过它,但也许它存在。

+0

yey也许你需要不 – Beginner

您可以派生表做到这一点,一个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 
+0

我们有一个赢家! – eromlige

+0

我遇到了“混合排序”错误。
我在比较中添加了二进制转换。 'SELECT l.name FROM(SELECT 'aname' 作为名称UNION ALL SELECT 'BNAME' UNION ALL SELECT 'CNAME' UNION ALL SELECT 'DNAME' )升LEFT JOIN 用户u ON BINARYù .username = BINARY l.name WHERE u.username IS NULL' – eromlige