2016-09-23 72 views
0

可能無意中偶然發現了一個很好的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

回答

1

您可以派生表做到這一點,一個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