2017-04-11 70 views
0

我有這四個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'; 

如何對它們進行簡化,在最好的情況下組合成一個單一的查詢?

回答

0

假設您已經記住要獲得由所有四個查詢結果組成的結果集,您可以將它們組合在一起。但是,我們可以簡化甚至進一步只使用一個單一的查詢:

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

既然你選擇在每個查詢同一個表同一領域,你就必須自己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

然後你需要多個連接。但那是另一個問題。我回答了你問的問題。回答問題後,你不能顯着改變問題。我建議你現在單獨提出這個問題。 –

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')) 
-1

聯盟應該幫助你在這裏:

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'將查詢合併到一個查詢中,但它不會以任何方式簡化查詢。 –