2010-07-15 55 views
2

我在SQL中相当缺乏经验,这看起来似乎是一件容易的事情,但我不确定如何去做。SQL - 按优先级设置第一个值?

基本上我想从表A中选择单个行,其中字段“someField”处于预定集“someSet”中,但我希望它单独查找集合中的每个值。例如,假设“someSet”包含了5,6,9,3,我会使用类似这样的查询:

SELECT * FROM A WHERE someField IN (5, 6, 9, 3) LIMIT 1 

不过,我希望它看起来5,然后再6,那么9,然后最后3如果还没有找到行。写成单独的查询它会是这样的:

SELECT * FROM A WHERE someField = 5 LIMIT 1 
(if no results returned) 
SELECT * FROM A WHERE someField = 6 LIMIT 1 
(if no results returned) 
SELECT * FROM A WHERE someField = 9 LIMIT 1 
(if no results returned) 
SELECT * FROM A WHERE someField = 3 LIMIT 1 

显然使用4个查询(理论上无限查询)是不是很优雅,是有办法,使之成为一个查询呢?

回答

6

你可以做

SELECT * FROM A WHERE someField IN (5, 6, 9, 3) 
ORDER BY FIELD(someField, 5, 6, 9, 3) 
LIMIT 1 
+0

酷,不知道ORDER BY可以这样使用。谢谢。 – Daniel 2010-07-15 03:07:14

+0

+1。我似乎每天都会学习一些关于SQL的新知识。 – Borealid 2010-07-15 03:09:11

+0

酷,奇妙,真棒,...希望我可以给更多只是+1 – 2013-12-16 05:04:20