-1

我有 2 个表员工(id 和姓名)和薪水(id,薪水),第一个有 4 行,第二个有 2 行。

table 1            Table 2
id   Name         id    salary
1     Sue          1    10000 
2    Sarah         3     9000
3    Nick 
4    james 

我想加入如下

id   Name     Salary
1     Sue     10000
2    Sarah    No Salary
3    Nick     9000
4    james    No salary
4

4 回答 4

7

T1要在加入缺少第 2 行和第 4 行的表时获取所有行,T2您需要使用左外连接。对于第 2 行和第 4 行,薪水将为空。

要将 null 值替换为其他值,您可以使用coalesce。合并返回第一个非空参数。

由于字段salary被声明为int字段,并且您希望No Salary在没有薪水的情况下作为输出,因此您需要在将其用作合并中的参数之前将其转换int为a 。varchar

declare @T1 table(id int, name varchar(10))
declare @T2 table(id int, salary int)

insert into @T1 values(1, 'Sue')
insert into @T1 values(2, 'Sarah')
insert into @T1 values(3, 'Nick')
insert into @T1 values(4, 'james') 

insert into @T2 values(1, 10000)
insert into @T2 values(3, 9000)

select
  T1.id,
  T1.name,
  coalesce(cast(T2.salary as varchar(10)), 'No Salary') as salary 
from @T1 as T1
  left outer join @T2 as T2
    on T1.id = T2.id  

结果

id          name       salary
----------- ---------- ----------
1           Sue        10000
2           Sarah      No Salary
3           Nick       9000
4           james      No Salary
于 2011-03-09T21:20:10.427 回答
2
SELECT e.id, e.name , 
case
when s.salary is null then 'no salary'
else cast(s.salary as varchar)
end
FROM employees e LEFT JOIN salary s
ON e.id=s.id
order by e.id
于 2011-03-09T18:48:59.097 回答
0

您的目标是列出所有员工,无论他们是否有列出的薪水,因此您应该使用LEFT JOIN. 内部连接可能会列出不再在 Employee 表中列出的员工的薪水,并且隐式连接(我相信)会丢失行。

像这样的东西应该做你需要的:

SELECT E.id, E.name, S.salary FROM Employees E LEFT JOIN Salary S ON E.id = S.id

于 2011-03-09T18:55:02.767 回答
-2

这应该可以解决问题。

SELECT e.id, e.name , s.salary FROM employees e 
LEFT JOIN salary s
ON e.id=s.id
ORDER BY e.id ASC
于 2011-03-09T18:47:16.337 回答