内部连接表但仅从一个表中选择

时间:2015-07-09 18:39:56

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

我有两个表连接,以便我可以比较一个字段并从一个表中提取记录,其中被比较的字段不在两个表中:

Table A
---------
Comp   Val
111    327
112    234
113    265
114    865


Table B
-----------
Comp2   Val2
111     7676
112     5678

所以我正在做的是在Comp-Comp2上连接两个表,然后我希望从表A中选择表B中不存在corrssponding Comp的所有值。在这种情况下,查询应该导致:< / p>

Result
---------
Comp   Val
113    265
114    865

以下是查询:

select * into Result from TableA
inner join TableB
on (TableB.Comp2 = TableA.Comp)
where TableB.Comp2 <> TableA.Comp

问题是,它从两个表中提取值。有没有办法单独从TableA中选择值而不明确指定字段?

5 个答案:

答案 0 :(得分:8)

只需在*前加上所需的表名称,如下所示:

select TableA.* into Result from TableA
inner join TableB
on (TableB.Comp2 = TableA.Comp)
where TableB.Comp2 <> TableA.Comp

答案 1 :(得分:5)

我想你想要这个,但是:

select  *
    from TableA a
    where
        not exists (select b.Comp2 from TableB b where a.Comp1 = b.Comp2)

这将在A中找到B中不存在的所有记录。

答案 2 :(得分:1)

您还可以执行左连接,然后只返回匹配的行:

SELECT TableA.*
FROM TableA
    LEFT JOIN TableB
        ON TableA.Comp = TableB.Comp2
WHERE TableB.Comp IS NULL

您可以像这样限制列返回,但通常最好不要使用*,而是命名所有列。

答案 3 :(得分:1)

SELECT a.* 
FROM tblA a,tblB b 
WHERE a.comp <> b.comp

答案 4 :(得分:0)

对我来说就像这样。表用于测试

select ov_item.*, ov.data_fecha from ov_item
inner join ov
on ov_item.id_ov = ov.id
where id_vendedor = 50 or id_tecnico = 50