2016-06-08 130 views
-1

想象一下,我有一張關於一個人的信息表(每人一行)可以稱之爲TableA,現在我想例如讓所有有債務的人TableB並且還可以通過支付每月月費TableC如何將2條SQL語句合併爲一條語句

現在已經通過這個兩個命令做的是簡單的,簡單的:

SELECT * 
    FROM TableA 
WHERE ID IN (SELECT ID 
       FROM TABLEB 
       WHERE Header1=false); 

SELECT * 
    FROM TableA 
WHERE ID IN (SELECT ID 
       FROM TABLEC 
       WHERE Header2=false); 

但我不想讓2個獨立的命令返回2個獨立的數據表,是不是可以將它們連接在一起相反,並得到它全部合併下來沒有重複?例如:

SELECT * 
    FROM TableA 
WHERE ID IN (SELECT ID 
       FROM TABLEB 
       WHERE Header1=false 
       AND 
       SELECT ID 
       FROM TABLEC 
       WHERE Header2=false); 

如果這是可能的,那麼正確的語法是什麼?

回答

2

爲什麼不使用UNION

SELECT ... 
FROM tableA 
WHERE id IN (
    SELECT id from tableB... 
    UNION ALL <---note this 
    SELECT id from tableC... 
) 
+0

你好,我不認爲工會都是answear,因爲我會從我的理解中得到重複的結果。示例返回結果= 1,2,3,1,1,3,3.簡單地說UNION是防止這種情況發生的替代方法嗎? –

+0

好吧,'union'本身會丟棄任何重複的值,但'in(...)'不會測試列表中的多個等號。如果「in(...)'列表中的任何值都匹配,則認爲連接成功。在列表中有兩個'2' ids不會產生兩個不同的連接。 'in(...)'只是一個很好的書寫方式'where field = val1 or field = val2 or field = val3 etc ...' –