在两个条件下连接两个表

时间:2014-04-04 07:54:23

标签: sql sql-server-2008

我有以下两张表,如图所示:

Table1
ID / Modif / Value
a / mb / Ki
a / x / Jim

Table 2
ID / Modif / Value
a / y / K
a / x / Kat
a / z / Ma





Desired Result:
ID / Modif / Value
a / mb / Ki

需要查看table1中table2中具有相同ID但是Modif值不同的所有记录。

你能帮忙吗?

3 个答案:

答案 0 :(得分:0)

如果您只需要第一张表格中的行,请使用exists

select  distinct c.* --, o.ID AS oID, o.Modif AS OModif, o.Val As OVal
from Table1 c
where not exists (select * from Table2  o where c.id = o.id and c.Modif = o.Modif)

答案 1 :(得分:0)

像这样加入:

SELECT DISTINCT c.* --, o.ID AS oID, o.Modif AS OModif, o.Val As OVal 
FROM
  Table1 c
  JOIN Table2 o ON c.ID = o.ID
        -- ensures there is at least 1 entry with same ID. 
  LEFT JOIN Table2 o2 ON c.ID = o2.ID AND c.Modif = o.Modif 
WHERE o2.Modif IS NULL
       -- left join + NULL check ensures there are NO entries with same ID and same Modif

如果我理解你的问题,那么这应该得到理想的结果

答案 2 :(得分:0)

抱歉,我忙于自己的工作,听起来像你需要的只是NOT IN命令,即:

SELECT DISTINCT c.ID, c.Modif, c.Value
FROM Table1 c
JOIN Table2 o on o.ID = c.ID 
WHERE c.Modif NOT IN
(
  Select o.Modif FROM Table2 o
)

这就是我如何处理你的情况,不确定它是否是最佳方式。

请在此处查看FIDDLE