2011-12-19 115 views
1

我有兩個表 - table1和table2。表1是如下:將一個表的一列與其他表的數據匹配

ID 
A01 
A02 
A03 
A04 
A05 

表2是如下:

DeptID Name  ID 
5  groupA  A01 
5  groupA  A03 
5  groupA  A04 
5  groupB  A02 
5  groupB  A04 
5  groupB  A05 

表3:

Codename DisplayName 
groupA  Humti 
groupB  Dumpti 

我想輸出爲:

DeptID Name   ID Result 
5  Humpti  A01 1 
5  Humpti  A02 0 
5  Humpti  A03 1 
5  Humpti  A04 1 
5  Humpti  A05 0 
5  Dumpti  A01 0 
5  Dumpti  A02 1 
5  Dumpti  A03 0 
5  Dumpti  A04 1 
5  Dumpti  A05 1 

這裏,A組有3個ID附加到它。 A01,A03,A04。因此,對於這些輸出中的結果列具有值1.但是對於A02,A05組A沒有關聯,因此結果列值爲0.我們需要記住的僅僅是groupA將與table1的所有ID進行比較。

編輯:所有的解決方案的工作非常偉大,但我可以用「Humpti」和「B組」基於在表3中的值「Dumpti」代替「A組」?

謝謝..

+0

你怎麼能擁有A組,GroupB'的'值到了'name'列匹配'ID'列中有值'A01,A02' – reggie 2011-12-19 14:49:54

+0

見編輯........ – Sandy 2011-12-19 15:00:27

回答

2
SELECT t2.deptId, t2.name, table1.id, CASE WHEN table2.id IS NULL THEN 0 ELSE 1 END result 
FROM table1, (SELECT distinct deptId, group from table2) t2 
LEFT OUTER JOIN table2 ON t2.name = table2.name AND t2.ID = table1.ID 

編輯,爲你改變的問題:

SELECT t2.deptId, table3.name, table1.id, CASE WHEN table2.id IS NULL THEN 0 ELSE 1 END result 
FROM table1, table3, (SELECT distinct deptId, name from table2) t2 
LEFT OUTER JOIN table2 ON t2.name = table2.name AND t2.ID = table1.ID 
WHERE table3.codename = t2.name 
+0

其upvoted ......謝謝 – Sandy 2011-12-19 15:49:15

+0

請參閱編輯......... – Sandy 2011-12-19 15:55:03

+0

更新了我的回答 – socha23 2011-12-19 16:01:50

1

這個查詢將返回數據設置你想要的。要求是有些奇怪的,所以當你擴展到做其他事情也可能無法工作:

select 
    sub.*, 
    result = case when t.ID is null then 0 else 1 end 
from 
    (
    select distinct 
     t2.DeptID, 
     t2.Name, 
     t1.ID 
    from 
     table1 t1, 
     table2 t2 
) sub 
left join table2 t on sub.ID = t.ID and sub.name = t.name 
+0

它的工作很好.... – Sandy 2011-12-19 15:49:27

+0

看到編輯後....我現在試着 – Sandy 2011-12-19 15:55:19

1
SELECT ddn.DeptID 
    , ddn.Name 
    , did.ID 
    , CASE WHEN t2.id IS NOT NULL 
       THEN 1 
       ELSE 0 
     END AS Result 
FROM 
    table1 AS did 
    CROSS JOIN 
    (SELECT DISTINCT 
      DeptID 
     , Name 
     FROM table2 
    ) AS ddn 
    LEFT JOIN table2 AS t2 
    ON t2.ID = did.ID 
    AND t2.DeptID = ddn.DeptID 
    AND t2.Name = ddn.Name 
+0

其upvoted ......謝謝 – Sandy 2011-12-19 15:49:06