2013-10-15 107 views
0

我在同一臺服務器上有兩個DB。對於每個正確工作的數據庫,我有兩個簡單的選擇查詢。但是,當它們合併成一個連接時,它們就會失敗。我想解決這個問題。在同一臺服務器上加入來自兩個不同數據庫的查詢?

僞 -

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'. 

回答

1

哎呀 - 我所要做的就是這一點 -

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。

+0

我可以在兩天內接受我的答案......太好了。 Source = google:sql server加入兩條select語句。鏈接 - http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=101449 – Steam

+0

這將是巨大的,只要滿足兩個條件:(1)在兩個結果中存在的所有值,否則,「內連接「將刪除任何不存在於兩側的」column1「值。如果這是一個問題,您可以選擇其中一個具有* all * column1值的結果,將其用作驅動程序(FROM表),然後使用LEFT OUTER JOIN而不是INNER JOIN。 (2)如果column1的任何值在兩個結果中出現多次,那麼您將得到results-rows的值......如果它不經常發生或混亂是可以理解的,那麼這只是一個表面上的問題。 –

0
select * 
from DataBaseName.ShemaName.TableName1 D1 inner join DataBaseName.ShemaName.TableName2 D2 
on D1.column1 = D2.column1 
WHERE Somecondition 
+0

我可能是錯的,但對於MSSQL,我認爲你需要的數據庫名稱和其中的模式將是表名之間的2點。 –

+0

都能跟得上SQL Server中的列的全名是像 ServerName.DatabaseName.SchemaName.TableName.ColumnName –

+1

確實,但如果數據庫在實例中,你可以解決這些問題作爲它用dbname..tablename將使用默認架構 - 或者您可以限定爲DBName.SchemaName.TableName(因爲您已編輯了顯示的答案)。 –

相關問題