Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 连接两个表,但仅从其中一个表中选择行_Sql_Sql Server_Join - Fatal编程技术网

Sql 连接两个表,但仅从其中一个表中选择行

Sql 连接两个表,但仅从其中一个表中选择行,sql,sql-server,join,Sql,Sql Server,Join,我有两个具有相同名称和模式的表。我想加入它们,但只从其中一个表中选择行。做这件事的好方法是什么?下面的查询从两个表中选择行,但我只希望从另一个数据库中选择表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 我尝试使用左外联接,但由于两个表之间的模式相同,因此这似乎不

我有两个具有相同名称和模式的表。我想加入它们,但只从其中一个表中选择行。做这件事的好方法是什么?下面的查询从两个表中选择行,但我只希望从另一个数据库中选择表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
我尝试使用左外联接,但由于两个表之间的模式相同,因此这似乎不起作用。
编辑:我只在select中包含“a”表列,以了解行返回的值。我只是不想从“a”返回任何行,所以我想以某种方式过滤掉这些行。

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

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

这就引出了这样一个问题:如果不想从另一个表中获取数据,为什么要加入到另一个表中。这是一种过滤方法吗?如果是这样的话,那么在性能方面最好执行exists

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

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

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

这就引出了这样一个问题:如果不想从另一个表中获取数据,为什么要加入到另一个表中。这是一种过滤方法吗?如果是这样的话,那么在性能方面最好执行exists

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

因此,修改您的
Select
语句,使其仅包含您关心的字段…?只需省略
a.fkey\u id
a.otherthing
呃,不要在选择列表中引用
a.anything
,如果您不想列出所有列,您只需从mytable a内部JOIN otherdb.dbo.mytable a2…@pmbAustin中选择a2.*或不使用SELECT*,只需列出所需的列(该表可能有400列),修改您的
Select
语句,使其仅包含您关心的字段…?只需省略
a.fkey\u id
a.otherthing
嗯,不要在选择列表中引用
a.anything
,如果您不想列出所有列,您只需从mytable a内部连接otherdb.dbo.mytable a2…@pmbAustin或不使用SELECT*选择a2.*即可列出所需的列(您所知道的该表可能有400列)。为什么*?我们确切地知道OP在哪两列之后。你看到我的第一个例子了吗?为什么*?我们确切地知道OP在哪两列。你看到我的第一个例子了吗?