好的,所以我有这个查询
select price from product where product_id in (49, 50, 51)
我想知道返回的三条记录是否与我的in子句的顺序相同。例如,
100.0000
166.0000
55.0000
将100.0000属于49,166.0000至50和55.0000至51
答案 0 :(得分:3)
没有。从产品表中选择时,它们将按照遇到的顺序返回。在数据库中进行排序是一项昂贵的操作,因此除非您明确告诉它,否则不会对任何内容进行排序。如果订单很重要,您应该有order by
条款。
答案 1 :(得分:2)
没有
IN子句不对行进行排序。 另外IN条款很糟糕,如果你可以避免它们。
SELECT price from product where product_id BETWEEN 49 AND 51
是一个更好的查询。如果您希望按特定顺序查询,请在结尾处order by somefield
。
更多关于IN
在您的用例中,您不需要IN,因为您可以与2进行3次比较,这样更快
如果您的查询是:
select price from product where product_id in (51547, 417853, 879823)
然后使用IN
就可以了。 这是IN
无法吸取
特别是永远不要将IN
与子选择
编码恐怖
SELECT price FROM product WHERE product_id IN
(SELECT product_id FROM tableX)
将其替换为
SELECT price FROM product
INNER JOIN tableX ON (product.product_id = tableX.product_id)
哪个更快。
答案 2 :(得分:1)
如果你想保留你在in子句中指定的相同顺序,你必须使用field()函数。
select price from product where product_id in (49, 50, 51)
order by field(product_id,49,50,51)