2012-08-14 109 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);