2016-01-10 39 views
1

我使用UNION從兩個表中獲取數據。表1包含3條記錄,表2包含1條記錄。 我的查詢是這樣根據條件從任一表中獲取數據

SELECT T1.Col1 as Country,T1.Col2 as Airline FROM TABLE1 T1 
    UNION 
    SELECT T2.Col1 as Country,T2.Col2 as Airline FROM TABLE2 T2; 
這個

所以,我得到以下結果

Country | Airline 
-------------------- 
Thailand | Thai Airways 
England | British Airways 
USA  | US Airlines 
USA  | Cathay Pacific 

這裏,從UNION的第一部分,我得到的第一個3條記錄(泰國,英國和美國航空)。

從聯盟的第二部分我得到國泰。

但我真正想要的是,如果Table2包含美國的值,那麼我想從Table2中取值,否則從Table1取值。因此,我想要以下類型的結果。

Country | Airline 
-------------------- 
Thailand | Thai Airways 
England | British Airways 
USA  | Cathay Pacific 

我試過在mysql.M中使用CASE語句,但我無法獲得正確的查詢。任何幫助,將不勝感激。

回答

0

嘗試使用此SQL查詢。如果來自table1的國家存在於表格T2中,則它不會包含在結果集中。

SELECT T1.Col1 AS country, T1.Col2 AS airline FROM Table1 T1 
WHERE T1.Col1 NOT IN(
    SELECT T2.Col1 FROM Table2 T2) 
UNION ALL 
SELECT T2.Col1 AS country, T2.Col2 AS airline FROM Table2 T2 
0

可以使用union allnot exists做到這一點:

SELECT T1.Col1 as Country, T1.Col2 as Airline FROM TABLE1 T1 
UNION ALL 
SELECT T2.Col1 as Country, T2.Col2 as Airline 
FROM TABLE2 T2 
WHERE NOT EXISTS (SELECT 1 FROM table1 t1 WHERE t1.col1 = t2.col1); 

雖然不是這麼幾個記錄的考慮,這個查詢是與TABLE1(col1, col2)指數較大的表進行了優化。

相關問題