Union

將多個“存在”查詢合併到一個語句中

  • March 26, 2013

我試圖弄清楚如何在一個語句中檢查多個表中是否存在多行。

給定下表:

table table_one 
========
id
'a'
'b'
'c'

table table_two
========
 id
'aa'
'bb'
'cc'

這行得通,

SELECT 1 from table_one where id = 'a'

SELECT 1 from table_two where id = 'aa' 

作品

如何將它們組合成一個語句?

我試過了

SELECT 1 FROM table_one WHERE id = 'a'
UNION 
SELECT 1 FROM  table_two WHERE id = 'aa'

但這只是將結果合併到一列中,因此我無法判斷特定表是否缺少一行。

我想要的是這樣的結果行

 table_one  table_two  table_three    table_four
 =========  =========  ===========    ==========
 1          1          [null]         1

UNION從整體結果中刪除重複的行,UNION ALL將保留它們。

要知道結果來自哪個表,請添加一個常量值:

SELECT 'one' as source, 
      1 
FROM table_one 
WHERE id = 'a'
UNION ALL
SELECT 'two',
      1 
FROM table_two 
WHERE id = 'aa'

引用自:https://dba.stackexchange.com/questions/37575