我有这个条款:
SELECT *
FROM picture p
WHERE p.id IN (2, 1, 3)
当我执行它时,我得到3个元素,但是以'id'(1,2,3
)排序。
我想要的是根据我给出的顺序获取元素:2,1,3
。
答案 0 :(得分:3)
当我执行它时,我得到3个元素,但是以'id'命令 (1,2,3)。
不是真的。你基本上得到一个任意的订单。没有ORDER BY
条款意味着没有可靠的订单。
如果要动态构建SQL,则必须执行以下操作:
SELECT *
FROM picture p
WHERE p.id IN (2, 1, 3)
ORDER BY CASE p.id
WHEN 2 THEN 1
WHEN 1 THEN 2
WHEN 3 THEN 3
END
答案 1 :(得分:1)
除CASE
外,您还可以使用 FIELD()
功能:
SELECT *
FROM picture p
WHERE p.id IN (2, 1, 3)
ORDER BY FIELD(p.id, 2, 1, 3)
答案 2 :(得分:0)
SELECT *
FROM picture p
WHERE
p.id = 2
UNION
SELECT *
FROM picture p
WHERE
p.id = 1
UNION
SELECT *
FROM picture p
WHERE
p.id = 3
来源:Click here
请不要在SELECT语句中使用“*”这是不好的做法;尝试阅读有关数据库优化的经验法则。