2012-10-05 44 views
1

我使用SQL Server 2008和拓藍SQL聯盟?或其他方法

,我現在面臨的問題是,我有兩個不同的數據庫的兩個表,它們具有相同的領域,我試圖對它們進行查詢,並有一定的標準滿足。

用戶具有查看錶和全部的正確權限。

兩個表我只需要幾場,所以我創建的意見,使生活更輕鬆: Db的美國,我創建一個視圖

(視圖)

"SELECT IDCUST, NAMECUST,CODETERM,AMTCRLIMT,DATELASTIV,AMTBALDUEH 
FROM TABLE! 
WHERE COUNTRYCODE = 'USA' OR COUNTRYCODE ="U.S.A" //this is for USA server 
only the other doesn't have the WHERE clause. 

現在我想do是用我的其他數據庫('MAIN')查詢這個視圖。

標準是如果IDCUST是相同的,那麼我只想從'美國'數據庫的行。

我想:

SELECT * 
FROM USA.dbo.VIEWUSA 
UNION 
SELECT * 
FROM MAIN.dbo.VIEWMAIN 
WHERE MAIN.dbo.IDCUST <> USA.dbo.VIEWUSA.IDCUST 

它有一個錯誤,雖然說USA.dbo.VIEWUSA.IDCUST是不恰當的。

我想它作爲一個加入,但我參加的所有沒有工作(最大行大約是6K,並將其在100K查詢之前,我停止了。)

回答

2

我覺得UNION ALL是最好的方法,但你需要一個輕微的調整:

select * 
from usa.dbo.ViewUSA 
union all 
select * 
from MAIN.dbo.VIEWMAIN vm 
where vm.idcust not in (select idcust from usa.dbo.ViewUSA) 
+0

謝謝你完美的工作! – jnoel10

0

如果我理解正確的話,這就是你想。這將從兩個表中獲取IDCUST相同的所有數據。

編輯:試試這個

SELECT * 
FROM USA.dbo.VIEWUSA a 
WHERE a.IDCUST NOT IN (SELECT DISTINCT IDCUST FROM MAIN.dbo.VIEWMAIN) 
+0

謝謝你的反應,這是相反。 我想要所有的美國的,但只有從主要!=美國的那些 – jnoel10

+0

所以你想美國的行,他們的IDCUST號碼不存在VIEWMAIN? –

+0

已編輯。試試嗎? –

1

使用UNION,你會從集合中刪除重複的行。聯合還希望每個select中的列都是相同的數據類型。如果您的表中命名相同的列具有相同的數據類型,則應該生成所需的輸出。

SELECT IDCUST 
    ,NAMECUST 
    ,CODETERM 
    ,AMTCRLIMT 
    ,DATELASTIV 
    ,AMTBALDUEH 
FROM USA.dbo.VIEWUSA 

UNION 

SELECT IDCUST 
    ,NAMECUST 
    ,CODETERM 
    ,AMTCRLIMT 
    ,DATELASTIV 
    ,AMTBALDUEH 
FROM MAIN.dbo.VIEWMAIN 
1

假設列名的數據類型是相同的,你喜歡的語法在找工會加入語法...

VIEWMAIN中沒有VIEWUSA條目的所有記錄。

SELECT customer_id, customer_name 
FROM MAIN.dbo.VIEWMAIN 
minus 
SELECT customer_id, customer_name 
FROM USA.dbo.VIEWUSA 

在VIEWUSA所有的記錄不在VIEWMAIN

SELECT customer_id, customer_name 
FROM MAIN.dbo.VIEWUSA 
minus 
SELECT customer_id, customer_name 
FROM USA.dbo.VIEWMAIN 

記錄了僅在兩個表

SELECT customer_id, customer_name 
FROM MAIN.dbo.VIEWUSA 
intersect 
SELECT customer_id, customer_name 
FROM USA.dbo.VIEWMAIN 
+0

減號是一個Oracle術語,在SQL Server中,您將使用Except。 http://stackoverflow.com/questions/5557991/minus-vs-except-difference-in-oracle-sql-server –

+0

謝謝布萊恩,戈登的回答完美地滿足了我的需求,但我會毫不猶豫地將您的信息用於其他我將不得不這樣做。 – jnoel10