2014-09-05 90 views
0

我有2个具有相同名称和模式的表格。我想加入他们,但只能从其中一个表中选择行。什么是这样做的好方法?下面的查询选择两个表中的行,但我只想从另一个数据库获取表a2。加入2个表格,但只选择其中一个表格中的行

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”返回任何行,所以我想以某种方式过滤这些行。

+0

因此,修改'Select'声明只包括您所关心的领域...? – Siyual 2014-09-05 17:51:11

+0

只是省略'a.fkey_id'和'a.otherthing' – pseudonym117 2014-09-05 17:51:12

+0

呃,不要在选择列表中引用'a.anything' – 2014-09-05 17:51:21

回答

3

只需从选择列表中删除对“a2”列的引用。

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

OR

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) 
+0

为什么*?我们确切知道OP后面的哪两列。 – 2014-09-05 17:54:24

+0

你有没有看到我的第一个例子? – 2014-09-05 17:55:21

+0

我做到了。我想知道为什么你添加了第二个例子。 – 2014-09-05 17:55:51

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)