如何组合/简化这些查询?

问题描述:

我有这四个SQL查询:如何组合/简化这些查询?

SELECT `a017kstatus` FROM `a017` WHERE `a017kstatus`='A' AND `a017kjantina`='L';  
SELECT `a017kstatus` FROM `a017` WHERE `a017kstatus`='A' AND `a017kjantina`='P';  
SELECT `a017kstatus` FROM `a017` WHERE `a017kstatus`='TA' AND `a017kjantina`='L';  
SELECT `a017kstatus` FROM `a017` WHERE `a017kstatus`='TA' AND `a017kjantina`='P'; 

如何对它们进行简化,在最好的情况下组合成一个单一的查询?

假设您已经记住要获得由所有四个查询结果组成的结果集,您可以将它们组合在一起。但是,我们可以简化甚至进一步只使用一个单一的查询:

SELECT a017kstatus 
FROM a017 
WHERE a017kstatus IN ('A', 'TA') AND 
     a017kjantina IN ('L', 'P') 

既然你选择在每个查询同一个表同一领域,你就必须自己where -clauses结合。

第一步就应该是这样的:

SELECT a017kstatus 
    FROM a017 
    WHERE a017kstatus='A' AND a017kjantina='L' 
    AND a017kstatus='A' AND a017kjantina='P' 
    AND a017kstatus='TA' AND a017kjantina='L' 
    AND a017kstatus='TA' AND a017kjantina='P' 

但它可以进一步通过使用in - 运算符可以简化:

SELECT a017kstatus 
    FROM a017 
    WHERE a017kstatus in ('A','TA') 
    AND a017kjantina in ('L','P') 
+0

感谢您的帮助,但我需要结果在不同的列。你能帮我吗 ? –

+0

然后你需要多个连接。但那是另一个问题。我回答了你问的问题。回答问题后,你不能显着改变问题。我建议你现在单独提出这个问题。 –

如果有一天,你应该提取的不同值a017kjantina代表a017kstatus('xx'只是一个例子):

SELECT a017kstatus 
    FROM a017 
    WHERE (a017kstatus ='A'AND a017kjantina in ('L','P')) 
     OR (a017kstatus ='L'AND a017kjantina in ('L','P', 'xx')) 

联盟应该帮助你在这里:

SELECT a017kstatus FROM a017 WHERE a017kstatus='A' AND a017kjantina='L' 
Union 
SELECT a017kstatus FROM a017 WHERE a017kstatus='A' AND a017kjantina='P' 
Union 
SELECT a017kstatus FROM a017 WHERE a017kstatus='TA' AND a017kjantina='L' 
Union 
SELECT a017kstatus FROM a017 WHERE a017kstatus='TA' AND a017kjantina='P'; 
+0

尽管'UNION'将查询合并到一个查询中,但它不会以任何方式简化查询。 –