如果column = x,则mysql选择行,否则为column = 0,distinct

时间:2014-05-15 21:52:21

标签: mysql select if-statement

我正在使用MySQL而且坚持 - 我想简单的问题。它看起来像这样:

我有一张桌子:

-----------------
id | name | age 
-----------------
1  | abc  | 0
2  | cde  | 30
3  | abc  | 30
4  | efg  | 0

现在,我想选择名称和年龄,但选择所有条件和即将来临的条件: 如果有任何年龄为30岁的行选择它,否则选择年龄为0.如果同时存在30和0年龄(如上例所示),则只选择年龄= 30的行。如果只有年龄= 0的行 - 选择它。

使用上面的表格我希望得到这样的结果:

id | name | age 
-----------------
2  | cde  | 30
3  | abc  | 30
4  | efg  | 0

Mysql应忽略年龄为0的第一行,因为存在名称相同且年龄= 30的行。 我试过了

SELECT name, age FROM table WHERE CASE WHEN age = 30 THEN 1 ELSE age = 0 END

但是它选择了0和30年龄的多行。 希望你能帮帮我。

1 个答案:

答案 0 :(得分:1)

不确定这是否正是您正在寻找的,但测试它并查看它是否有效:)

(SELECT id, name, age FROM myTable WHERE age = 30)

UNION

(SELECT id, name, age FROM myTable WHERE age = 0 ORDER BY id DESC LIMIT 1)

SQL FIDDLE

一起玩
(SELECT id, name, age FROM myTable WHERE age = 30)

UNION

(SELECT id, name, age
FROM mytable
WHERE age = 0
  AND name NOT in(SELECT name FROM myTable WHERE age = 30)
ORDER BY id DESC)
带有op请求的

NEW FIDDLE