2011-12-19 131 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

相关问题