【问题标题】:Joining on 2 tables but only selecting rows from one of the tables加入 2 个表,但仅从其中一个表中选择行
【发布时间】:2014-09-06 01:56:03
【问题描述】:

我有 2 个名称和架构相同的表。我想加入他们,但只从其中一张表中选择行。有什么好方法可以做到这一点?下面的查询从两个表中选择行,但我只想要另一个数据库中的表 a2。

select a.fkey_id, a2.fkeyid_id, a.otherthing, a2.otherthing from mytable a 
    inner join otherdb.dbo.mytable a2 on a.fkey_id=a2.fkey_id

我尝试使用左外连接,但由于两个表之间的架构相同,这似乎不起作用。 编辑:我只在选择中包含“a”表列,以了解行返回的值。我只是不想从“a”返回任何行,所以我想以某种方式过滤掉这些行。

【问题讨论】:

  • 那么,修改您的Select 语句以仅包含您关心的字段...?
  • 省略a.fkey_ida.otherthing
  • 呃,不要在选择列表中引用a.anything
  • 如果你不想列出所有的列,你可以 SELECT a2.* from mytable a INNER JOIN otherdb.dbo.mytable a2 ...
  • @pmbAustin 或者不要使用 SELECT * 并只列出所需的列(该表可能有 400 列,据您所知)。

标签: sql sql-server join


【解决方案1】:

只需从选择列表中取出对“a2”列的引用即可。

select a.fkey_id, a.otherthing from mytable a 
    inner join otherdb.dbo.mytable a2 on a.fkey_id=a2.fkey_id

select a.* from mytable a 
    inner join otherdb.dbo.mytable a2 on a.fkey_id=a2.fkey_id

如果您不想要来自另一个表的数据,这会引出您为什么要加入另一个表的问题。这是一种过滤方法吗?如果是这样,那么在性能方面做一个存在会更好。

select a.* from mytable a 
 WHERE EXISTS (
      SELECT 1
      FROM otherdb.dbo.mytable a2 
      WHERE a.fkey_id=a2.fkey_id)

【讨论】:

  • 为什么是 *?我们确切地知道 OP 在哪两列之后。
  • 你看到我的第一个例子了吗?
【解决方案2】:
select a.fkey_id
     , a.otherthing
from mytable a 
WHERE EXISTS (SELECT 1 
              FROM  otherdb.dbo.mytable a2
              WHERE a.fkey_id=a2.fkey_id) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 2020-01-03
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    相关资源
    最近更新 更多