2011-03-09 117 views
-1

我有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

所以你創建一個帳戶這裏只是要求我們做的功課?在同一時間,您可能會搜索SQL JOIN並完成作業。 – red 2011-03-09 18:46:03

+0

「博薪」有多少? 「博」在「獎金」,對不對? – 2011-03-09 18:46:54

+0

來吧夥計..我開始與SQL所以張貼了這樣一個問題..不要回復,如果你認爲這太愚蠢.. – LearningSQL 2011-03-09 18:53:41

回答

-2

這應該做的伎倆。

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代替

+4

這不是你正在尋找的聯接... – 2011-03-09 18:48:12

+0

更新,添加了一個筆記。我們不知道「薪水」列是如何存儲的,所以.. – Arda 2011-03-09 18:50:12

+4

你的評論意味着你不太明白外部連接是什麼。 – 2011-03-09 18:50:55

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 
+1

CASE表達不錯,JOIN不好... – 2011-03-09 18:50:08

+0

你是對的,應該離開加入 – BlackTigerX 2011-03-09 19:15:53

0

你的目標是列出所有員工,無論他們是否擁有一個上市的工資,所以你應該使用LEFT JOIN。內部聯接可能會列出Employee表中不再列出的員工的薪水,並且隱式聯接(我相信)會缺少行。

像這樣的東西應該做你需要的東西:

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

+0

但我想在沒有任何工資的員工的薪水欄中選擇「無薪」 – LearningSQL 2011-03-09 18:59:12

7

T1加入到餐桌T2所缺你需要使用一個left outer join行2和4時,你得到的所有行。對於第2和第4行,工資將爲空。

要用其他值替換空值,可以使用coalesce。合併返回第一個非空參數。

由於現場salary被聲明爲int領域,你想No Salary因爲那裏是沒有工資,你需要用它作爲聚結參數之前castintvarchar輸出。

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