Sql 是否在同一服务器上连接来自两个不同数据库的查询?

Sql 是否在同一服务器上连接来自两个不同数据库的查询?,sql,sql-server,Sql,Sql Server,我在同一台服务器上有两个数据库。对于每个正常工作的DB,我有两个简单的select查询。但是,当组合成一个连接时,它们失败了。我想解决这个问题 伪码 select * from (select columns from DB1) as D1 inner join select * from (select columns from DB2 where some valid condition) as D2 on D1.column1 = D2.column1 错误- Incorrect sy

我在同一台服务器上有两个数据库。对于每个正常工作的DB,我有两个简单的select查询。但是,当组合成一个连接时,它们失败了。我想解决这个问题

伪码

select *
from (select columns from DB1) as D1
inner join 
select *
from (select columns from DB2 where some valid condition) as D2
on D1.column1 = D2.column1
错误-

Incorrect syntax near the keyword 'SELECT'. (ie second "outer" select)
Incorrect syntax near the keyword 'on'.

天啊,我所要做的就是

select *
from (select columns from DB1) as D1
inner join 
--select *
--from 
(select columns from DB2 where some valid condition) as D2
on D1.column1 = D2.column1
请参阅注释行。移除它们,它应该会工作

注意,要包括从D2中选择的列,请将D2列放在最上面的select语句中

select col1b, col2c
from (select col1a, col1b from DB1) as D1
inner join 
--select *
--from 
(select col2a, col2b, col2c from DB2 where some valid condition) as D2
on D1.col1a = D2.col2a

这将显示col1b和col2c。

我可能错了,但对于MSSQL,我认为在数据库名和表名之间需要两个点来表示模式的位置。不,在sql server中,列的完全限定名类似于ServerName.DatabaseName.SchemaName.TableName.columnname确实,但是如果数据库在实例中,您可以将它们命名为DBNAme..TableName,它将使用默认架构-或者您可以将其限定为DBNAme.SchemaName.TableName(正如您已编辑答案所显示的那样)。虽然您可以使用..,但您应该使用架构名称,通常默认为dbo。如果您有另一台服务器,它应该是由四部分组成的名称
server.Database.Schema.Object
。通常,
SELECT*FROM Database.Schema.Object…
我忘记在回答中输入架构名称了,谢谢你的提问。但是使用DatabaseName如果您只引用默认模式dbo,那么使用TableName是可以的,但是对于数据库中的任何其他模式,您都必须使用完全限定名我可以在两天内接受我的答案…太好了。Source=google:sqlserver连接两条select语句。链接-只要满足两个条件,那就太好了:(1)两个结果中都存在所有值,否则,“内部联接”将删除两侧都不存在的“column1”的任何值。如果这是一个问题,您可以选择一个包含所有column1值的结果,将其用作驱动程序(FROM表),然后使用左外部联接而不是内部联接。(2) 如果column1的任何值在两个结果中出现多次,那么您将得到结果行的值。。。如果这种情况不经常发生,或者混乱是可以理解的,那么这只是一种表面上的担忧。
select col1b, col2c
from (select col1a, col1b from DB1) as D1
inner join 
--select *
--from 
(select col2a, col2b, col2c from DB2 where some valid condition) as D2
on D1.col1a = D2.col2a