我有2張表員工(id和name)和薪水(id,salary),第一行有4行,第二行有2行。SQL加入兩張表
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
我有2張表員工(id和name)和薪水(id,salary),第一行有4行,第二行有2行。SQL加入兩張表
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
這應該做的伎倆。
SELECT e.id, e.name , s.salary FROM employees e
INNER JOIN salary s
ON e.id=s.id
ORDER BY e.id ASC
編輯:
如果工資數據是具有空變量嘗試LEFT JOIN代替
這不是你正在尋找的聯接... – 2011-03-09 18:48:12
更新,添加了一個筆記。我們不知道「薪水」列是如何存儲的,所以.. – Arda 2011-03-09 18:50:12
你的評論意味着你不太明白外部連接是什麼。 – 2011-03-09 18:50:55
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
CASE表達不錯,JOIN不好... – 2011-03-09 18:50:08
你是對的,應該離開加入 – BlackTigerX 2011-03-09 19:15:53
你的目標是列出所有員工,無論他們是否擁有一個上市的工資,所以你應該使用LEFT JOIN
。內部聯接可能會列出Employee表中不再列出的員工的薪水,並且隱式聯接(我相信)會缺少行。
像這樣的東西應該做你需要的東西:
SELECT E.id, E.name, S.salary FROM Employees E LEFT JOIN Salary S ON E.id = S.id
但我想在沒有任何工資的員工的薪水欄中選擇「無薪」 – LearningSQL 2011-03-09 18:59:12
從T1
加入到餐桌T2
所缺你需要使用一個left outer join行2和4時,你得到的所有行。對於第2和第4行,工資將爲空。
要用其他值替換空值,可以使用coalesce。合併返回第一個非空參數。
由於現場salary
被聲明爲int
領域,你想No Salary
因爲那裏是沒有工資,你需要用它作爲聚結參數之前cast的int
到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
所以你創建一個帳戶這裏只是要求我們做的功課?在同一時間,您可能會搜索SQL JOIN並完成作業。 – red 2011-03-09 18:46:03
「博薪」有多少? 「博」在「獎金」,對不對? – 2011-03-09 18:46:54
來吧夥計..我開始與SQL所以張貼了這樣一個問題..不要回復,如果你認爲這太愚蠢.. – LearningSQL 2011-03-09 18:53:41