SQL使用回退列进行匹配

时间:2016-02-03 22:17:53

标签: sql coalesce short-circuiting

假设我在sql数据库中有一个表,如

name    age  shoesize
---------------------
tom      20      NULL
dick   NULL         4
harry    30         5

我想要一个选择年龄== X的名称的SQL语句,或者如果不存在这样的名称,则使用后备,使用鞋号为== Y的那些。换句话说,在此表中,对于X = 20,Y = 4我应该只得到'tom',而对于X = 25,Y = 4我应该只得到'dick'。

我无法做到这一点
SELECT name FROM table WHERE age = 20 OR shoe size = 4;

因为那将选择汤姆和迪克。我正在使用

SELECT COALESCE ((SELECT name FROM tab WHERE age = 20),(SELECT name FROM tab WHERE shoesize = 4));

但有更简洁的方法吗?同样使用这样的合并也不允许我获得整行 - 即我不能使用SELECT * FROM tab,我只能选择一个名称。

1 个答案:

答案 0 :(得分:0)

您可以使用FETCH FIRST 1 ROW ONLYSELECT name FROM tab ORDER BY (CASE WHEN age = X THEN 1 WHEN shoesize = Y THEN 2 ELSE 3 END) FETCH FIRST 1 ROW ONLY; 或类似的一些条款:

FETCH FIRST 1 ROW ONLY

某些数据库拼写LIMIT,例如TOPfloat:right,甚至是其他内容。