2015-10-07 218 views
-4

考慮一個Employee表2列SQL查詢顯示沒有電話的所有員工的姓名?

ID是INT數據類型的

NAME是VARCHAR數據類型的。

考慮一個第二Employee_PHONE表2列

ID是INT數據類型的

PHONE是VARCHAR數據類型的。 兩者都設置爲NOT NULL。 EMPLOYEE_PHONE的

ID是外鍵它引用EMPLOYEE表

的主鍵的員工可能沒有任何電話或可能有多個電話。 什麼是SQL查詢以顯示沒有電話的所有員工的姓名?

+0

什麼數據庫系統,您使用的? Oracle,SQL Server,Postgresql,MySQL? –

回答

0

這裏有兩個選擇查詢。

SELECT * FROM Employee a WHERE a.ID NOT IN (SELECT b.ID FROM Employee_PHONE) 

    SELECT * FROM Employee a 
    LEFT JOIN Employee_PHONE b ON a.ID = b.ID WHERE ISNULL(b.PHONE,'') = '' 
1

這可以直接從 「英語SQL」 被翻譯

select e.* 
from employee e ---<<< get me all employees 
where not exists ---<<< that do not have a phone 
      (select * 
      from employee_phone ep 
      where ep.employee_id = e.id 
      and ep.phone <> ''); -- in case you allow empty strings in that column 
+0

它可以存在,但電話列是空白的。所以如果兩個表中存在相同的ID,這個查詢將不包括該空白電話號碼。 – Japongskie

+0

@JapzDivino:好的列設置爲「NOT NULL」,所以我假設「空字符串」也是無效的,但我已更新查詢。 –

+1

@a_horse_with_no_name也許'ISNULL(ep.phone。'')<>'''會更好嗎? –

0
select E.Name 
from Employee E left Join Employee_PHONE EP 
    on E.ID = EP.ID 
where EP.EMPLOYEE_PHONE is null or EP.EMPLOYEE_PHONE = '' 
+2

'INNER JOIN'將只顯示員工的電話號碼。 OP想要的是相反的。也許你正在尋找一種不同類型的「JOIN」。 –

+0

@RaduGheorghiu: - 謝謝指出。更新! –

0

試試這個:

select E.Name 
from Employee E left Join Employee_PHONE EP 
    on E.ID = EP.ID 
where EP.EMPLOYEE_PHONE is null 
相關問題