2013-11-20 70 views
0

我想將兩個表合併到一個視圖中。將兩個表合併爲一個視圖

目前第一個表包含4列

ID | CatID | ImmID | Cost 

第二個也是4列

ID | CatID | ImmID | Price 

我想將它們合併,使合併後的表將有5列

ID | CatId | ImmId | Cost | Price 

如果兩張表中都存在catID,我想只有一條記錄 如果catID是prensent在兩個表中的一箇中,我想在Cost或Price列中輸入一個0

這樣3個例子。

這是我當前的查詢

SELECT first.CatID, first.ImmID, first.Cost, 0 
FROM costs first 
UNION 
SELECT second.CatID, second.ImmID, 0, second.Price 
FROM prices second 

,但它並不適用於一個單一的CATID因爲工作,兩個記錄返回

12| 15| 80| 1500 | 0 
12| 15| 80| 0 | 700 

而不是其中一個看起來像

12| 15| 80| 1500| 700 
+0

兩個記錄抱歉,沒有mentionning它 – Max

回答

0

好吧,現在就試試這個 - 應該這樣做:

--This query will return only one row if ID is common** 
SELECT a.Id, a.CatId, a.ImmID, a.Cost, b.Price 
FROM first a, second b 
WHERE a.CatID=b.CatID 
    union 
--this query will return only value from first table with price 0** 
SELECT a.Id, a.CatId, a.ImmID, a.Cost, 0 
FROM first a, second b 
WHERE a.CatID<>b.CatID 
    union 
--this query will return only value from second table with cost 0** 
SELECT b.Id, b.CatId, b.ImmID, 0, b.Price 
FROM second b, first a 
WHERE b.CatID<>a.CatID 
+0

這是行不通的,因爲這不是兩個表中的CatIDs不顯示 – Max

+0

而是採用a.Id = b.Id,u可以使用a.CatID = b.CatID。這個想法是對的。 – saif

+0

現在嘗試我的朋友..... – saif

0

這會做詭計嗎?

SELECT second.ID, first.CatID, first.ImmID, first.Cost, second.Price 
FROM costs first , prices second 
WHERE first.CatID = second.CatID 
+0

不,因爲如果兩個表上都沒有catId,我希望它在Price上顯示爲0(如果它只在Cost表中)或0在Cost上顯示(如果它僅在價格表中) – Max

+0

嗯,不確定要了解您的數據庫設計和完整性約束... – user2196728