考慮一個Employee
表2列SQL查詢顯示沒有電話的所有員工的姓名?
ID是INT數據類型的
NAME是VARCHAR數據類型的。
考慮一個第二Employee_PHONE
表2列
ID是INT數據類型的
PHONE是VARCHAR數據類型的。 兩者都設置爲NOT NULL。 EMPLOYEE_PHONE的
ID是外鍵它引用EMPLOYEE表
的主鍵的員工可能沒有任何電話或可能有多個電話。 什麼是SQL查詢以顯示沒有電話的所有員工的姓名?
考慮一個Employee
表2列SQL查詢顯示沒有電話的所有員工的姓名?
ID是INT數據類型的
NAME是VARCHAR數據類型的。
考慮一個第二Employee_PHONE
表2列
ID是INT數據類型的
PHONE是VARCHAR數據類型的。 兩者都設置爲NOT NULL。 EMPLOYEE_PHONE的
ID是外鍵它引用EMPLOYEE表
的主鍵的員工可能沒有任何電話或可能有多個電話。 什麼是SQL查詢以顯示沒有電話的所有員工的姓名?
這裏有兩個選擇查詢。
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,'') = ''
這可以直接從 「英語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
它可以存在,但電話列是空白的。所以如果兩個表中存在相同的ID,這個查詢將不包括該空白電話號碼。 – Japongskie
@JapzDivino:好的列設置爲「NOT NULL」,所以我假設「空字符串」也是無效的,但我已更新查詢。 –
@a_horse_with_no_name也許'ISNULL(ep.phone。'')<>'''會更好嗎? –
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 = ''
'INNER JOIN'將只顯示員工的電話號碼。 OP想要的是相反的。也許你正在尋找一種不同類型的「JOIN」。 –
@RaduGheorghiu: - 謝謝指出。更新! –
試試這個:
select E.Name
from Employee E left Join Employee_PHONE EP
on E.ID = EP.ID
where EP.EMPLOYEE_PHONE is null
什麼數據庫系統,您使用的? Oracle,SQL Server,Postgresql,MySQL? –