【问题标题】:Inner Join Tables But Select From One Table Only内部连接表但仅从一个表中选择
【发布时间】:2015-07-09 18:39:55
【问题描述】:

我有两个要加入的表,以便我可以比较一个字段并从一个表中提取记录,而要比较的字段不在两个表中:

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


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

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

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 中选择值而不明确指定字段?

【问题讨论】:

  • 像这样:TableA.*
  • 在这些情况下最好使用NOT EXISTS

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    不过,我想你想要这个:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:
        SELECT a.* 
        FROM tblA a,tblB b 
        WHERE a.comp <> b.comp
        

        【讨论】:

          【解决方案5】:

          对我来说是这样的。表格用于测试

          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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-13
            • 1970-01-01
            • 2020-10-25
            • 2020-08-17
            • 2017-07-01
            • 1970-01-01
            相关资源
            最近更新 更多