假设我在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
,我只能选择一个名称。
答案 0 :(得分:0)
您可以使用FETCH FIRST 1 ROW ONLY
和SELECT 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
,例如TOP
或float:right
,甚至是其他内容。