2016-06-08 167 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 ...' –