-1

私は2つのテーブルemployees(idとname)とsalary(id、salary)を持っています.1番目には4行、2番目には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 になります。

null 値を別のものに置き換えるには、coalesceを使用できます。合体は最初の非ヌル引数を返します。

fieldはフィールドsalaryとして宣言されており、給与がない場合に出力として使用する必要があるため、合体で引数として使用する前にを aにキャストする必要があります。intNo Salaryintvarchar

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。内部結合は、従業員テーブルにリストがなくなった従業員の給与をリストする可能性があり、暗黙的な結合 (私は信じています) は行が欠落するでしょう。

このような何かがあなたが必要とすることをするはずです:

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 に答える