2

我正在运行查询以生成适用各种参数的所有记录。

假设相关表包含有关人员的详细信息。

我想生成“男性”和“女性”条目的记录,但我只想显示年龄低于“40”的男性。

目前我有这样的查询;

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

如何仅将年龄规则应用于男性?使用 CASE 语句?

编辑

由于我在 WHERE 子句中有许多其他参数,我在这里没有提到,我想避免使用 OR 运算符,很抱歉没有一开始就说明这一点。

4

5 回答 5

3

无需CASE声明,只需更改您的WHERE子句以包含一个特定于'Male'记录的过滤器和一行'Female'记录:

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

这是一个带有演示的 SQL Fiddle

编辑如果您的WHERE子句中有更多项目,您只需使用括号添加更多标准:

SELECT *
FROM table
WHERE 
(
    (gender = 'Male' AND age < 40)
        OR gender = 'Female'
)
AND -- place your other WHERE filters here
于 2012-08-14T14:32:39.507 回答
2

有很多方法可以写这个,但这可能是最清楚的:

SELECT * 
FROM table 
WHERE gender = 'Female' 
    or (gender = 'Male' AND age < 40) 
于 2012-08-14T14:31:37.390 回答
2
SELECT * 
FROM table 
WHERE (gender = 'Female' OR (gender = 'Male' AND age < 40)) AND ...
    -- the rest of your WHERE criteria goes here
于 2012-08-14T14:32:33.133 回答
1
SELECT *
FROM table
WHERE (age < 40 and gender = 'Male')
or gender = 'Female'
于 2012-08-14T14:31:55.327 回答
0

使用 IN 否 =

SELECT *
FROM table 
WHERE gender IN('Female') OR (gender IN('Male') AND age < 40);
于 2012-08-14T14:35:41.000 回答