只是运行SQL并使用子查询编写了一个查询,但是当它没有假设时它返回了一个空值。不确定是否有人可以在没有数据库的情况下提供帮助,但这是我的查询:
*这是运动问题: '使用带有子查询的SQL语句列出员工ID及其全名 作为经理的员工。使用列标题Manager ID和Manager。'
SELECT
ReportsTo As 'Manager ID',
CONCAT(FirstName,' ',Lastname) As 'Manager'
FROM
Employees
WHERE
EmployeeID IN
(SELECT ReportsTo
FROM Employees);
答案 0 :(得分:0)
假设我理解您的问题,您希望返回标记为经理的员工(由reportto列表示)。如果是这样,您可以使用EXISTS
:
select employeeid, concat(firstname,' ', lastname) fullname
from employees e
where exists (
select 1
from employees e2
where e.employeeid = e2.reportsto)
这将返回一个员工列表,其员工的ID和全名在reportsto
字段中存在。
如果您更喜欢in
语法,那么这应该是相同的:
select employeeid, concat(firstname,' ', lastname) fullname
from employees e
where employeeid in (
select reportsto
from employees
)
答案 1 :(得分:0)
首先,子查询显示不正确。您试图说“从Employees表中获取ReportsTo和人员名称,其中Employee ID等于同一表中的任何ReportsTo字段”
您需要将子查询中的ReportsTo更改为EmployeeID。 IE
SELECT
ReportsTo As 'Manager ID',
CONCAT(FirstName,' ',Lastname) As 'Manager'
FROM
Employees
WHERE
EmployeeID IN
(SELECT EmployeeID --Here is where i've changed the value
FROM Employees);
然而,这个查询本身与简单的写作没有区别:
SELECT
ReportsTo As 'Manager ID',
CONCAT(FirstName,' ',Lastname) As 'Manager'
FROM
Employees
如果您试图以某种方式过滤掉您的结果,您想要过滤掉哪些“员工”记录?请提供更多信息。
答案 2 :(得分:0)
用户 CONCATWS 功能代替处理空值的 CONCAT 。
参考链接 MySQL CONCAT returns NULL if any field contain NULL
下面是sqlserver示例。在sqlserver ISNULL 函数中处理空值
declare @Employees table(EmployeeID int, firstname varchar(50), lastname varchar(50), ReportsTo int null)
insert into @Employees values ( 1,'abc','xyz',0),( 2,'def','xyz1',1),( 3,'abc1','xyz2',null)
SELECT
ReportsTo As 'Manager ID',
isnull( FirstName ,'') + '' + ISNULL(lastname,0 ) as 'Manager'
--CONCAT(FirstName,' ',Lastname) As 'Manager'
FROM
@Employees
WHERE
EmployeeID IN
(SELECT ReportsTo
FROM @Employees);