SQL只返回另一个表中存在的id

时间:2017-08-30 10:47:12

标签: sql sql-server sql-server-2008

如何从check_type_dim_id表中专门存在的Check_Type_Dimension表中返回Check_Type_Master

我应该只返回5个结果但是因为尝试加入名字而得到6个结果:

WHERE EXISTS
(SELECT check_type_id FROM check_type_master CTM WHERE 
 CTM.check_type_name = CTD.check_type_name)

问题是,check_type_dim_id是一个审核表,可能有重复的名称。

表:Check_Type_Dimension包含以下信息:

enter image description here

Check_Type_Master包含以下信息:

enter image description here

3 个答案:

答案 0 :(得分:0)

SELECT CTM.id
FROM check_type_master CTM 
JOIN Check_Type_Dimension CTD 
    ON CTM.check_type_name= CTD.check_type_name AND  CTM.check_type_id= CTD.check_type_id

答案 1 :(得分:0)

如果我理解正确,那应该可以解决你的问题:

SELECT check_type_dim_id FROM Check_Type_Dimension
WHERE check_type_dim_id IN (SELECT check_type_dim_id FROM Check_Type_Master)

通常,您可以将IN运算符与子查询一起使用,以将某些列限制为子查询返回的集合(它必须是单列表)。

答案 2 :(得分:0)

你应该在id和amp;中链接EXISTS中的2个表。名称。

因为您在Dimension表中有2个不同的id具有相同的名称("会员费用"),那么您的查询将提供额外的结果。

实施例:

select check_type_dim_id
from Check_Type_Dimension CTD 
where exists (
   select 1
   from Check_Type_Master CTM
   where CTM.check_type_id = CTD.check_type_id
     and CTM.check_type_name = CTD.check_type_name
);