考虑一个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? –