罗斯文数据库 | SQL 查询 returns 名员工及其报告对象
Northwind database | SQL query that returns employees and who they report to
我正在尝试为 Northwind 数据库编写一个查询,其中列出了员工及其经理的姓名,但不包括没有人要向其报告的员工。
这是我目前的情况:
SELECT employees.firstname, employees.lastname, superior.firstname, superior.lastname
FROM employees
LEFT OUTER JOIN employees superior ON employees.reportsto = superior.employeeID
WHERE employees.reportsto <> null;
此查询运行,但未显示任何内容。
你应该试试:
SELECT employees.firstname, employees.lastname, superior.firstname, superior.lastname
FROM employees
LEFT OUTER JOIN employees superior ON employees.reportsto = superior.employeeID
WHERE employees.reportsto IS NOT NULL --or "<> NULL" when ANSI_NULLS is set to OFF ("!=" is specific to SQL server)
如果你用的是sql server
,默认是set ANSI_NULLS
ON,需要用IS/IS NOT
和NULL
比较
尝试 IS NOT NULL:
SELECT employees.firstname, employees.lastname, superior.firstname, superior.lastname
FROM employees
LEFT OUTER JOIN employees superior ON employees.reportsto = superior.employeeID
WHERE employees.reportsto IS NOT NULL;
说明:
NULL 没有值,因此不能使用标量值运算符进行比较。
我明白了,永远不要尝试将值与 null 进行比较。正确答案是:
WHERE employeesAM.reportsto **is not** null;
SELECT empa.employeeid,
empa.firstname,
empa.lastname,
empb.firstname AS 'Reports to Manager'
FROM employees empa
INNER JOIN employees empb
ON empa.reportsto = empb.employeeid
我正在尝试为 Northwind 数据库编写一个查询,其中列出了员工及其经理的姓名,但不包括没有人要向其报告的员工。
这是我目前的情况:
SELECT employees.firstname, employees.lastname, superior.firstname, superior.lastname
FROM employees
LEFT OUTER JOIN employees superior ON employees.reportsto = superior.employeeID
WHERE employees.reportsto <> null;
此查询运行,但未显示任何内容。
你应该试试:
SELECT employees.firstname, employees.lastname, superior.firstname, superior.lastname
FROM employees
LEFT OUTER JOIN employees superior ON employees.reportsto = superior.employeeID
WHERE employees.reportsto IS NOT NULL --or "<> NULL" when ANSI_NULLS is set to OFF ("!=" is specific to SQL server)
如果你用的是sql server
,默认是set ANSI_NULLS
ON,需要用IS/IS NOT
和NULL
比较
尝试 IS NOT NULL:
SELECT employees.firstname, employees.lastname, superior.firstname, superior.lastname
FROM employees
LEFT OUTER JOIN employees superior ON employees.reportsto = superior.employeeID
WHERE employees.reportsto IS NOT NULL;
说明: NULL 没有值,因此不能使用标量值运算符进行比较。
我明白了,永远不要尝试将值与 null 进行比较。正确答案是:
WHERE employeesAM.reportsto **is not** null;
SELECT empa.employeeid,
empa.firstname,
empa.lastname,
empb.firstname AS 'Reports to Manager'
FROM employees empa
INNER JOIN employees empb
ON empa.reportsto = empb.employeeid