2012-08-14 110 views
2

我正在運行一個查詢來生成應用各種參數的所有記錄。在WHERE子句中的CASE語句中有兩個參數

假設有關表格包含有關人員的詳細信息。

我想爲「男性」和「女性」作品創作記錄,但我只想向年齡低於40歲的男性展示這些記錄。

目前我有這樣的查詢;

SELECT * 
FROM table 
WHERE gender IN('Male', 'Female') AND age < 40 

如何將年齡規則應用於男性?用CASE語句?

編輯

正如我在WHERE子句中的許多其它參數,我這裏沒有提到,我要避免使用或操作的,不說明這個道歉開始。

+0

你可以不要接受其中一個答案,而只是將性別/年齡馴服包裹在另一組括號內? – LittleBobbyTables 2012-08-14 14:57:12

+0

我不確定你的意思,我會在哪裏放置圓括號,以及如何解決OR問題?提前致謝。 – William 2012-08-14 15:02:58

回答

3

沒有必要對CASE聲明只是改變你的WHERE子句包括一個過濾特定對於'Male'記錄和一行'Female'記錄:

SELECT * 
FROM table 
WHERE (gender = 'Male' AND age < 40) 
    OR gender = 'Female' 

這裏是一個SQL Fiddle with a Demo

編輯,如果你在你的WHERE條款有更多的項目,你只需用括號來添加更多的標準:

SELECT * 
FROM table 
WHERE 
(
    (gender = 'Male' AND age < 40) 
     OR gender = 'Female' 
) 
AND -- place your other WHERE filters here 
+1

@ William231請參閱我的編輯根據您的意見 – Taryn 2012-08-14 17:51:52

2

有很多方法來寫這個,但是這可能是最清楚的:

SELECT * 
FROM table 
WHERE gender = 'Female' 
    or (gender = 'Male' AND age < 40) 
1
SELECT * 
FROM table 
WHERE (age < 40 and gender = 'Male') 
or gender = 'Female' 
2
SELECT * 
FROM table 
WHERE (gender = 'Female' OR (gender = 'Male' AND age < 40)) AND ... 
    -- the rest of your WHERE criteria goes here 
0

使用中沒有=

SELECT * 
FROM table 
WHERE gender IN('Female') OR (gender IN('Male') AND age < 40);