in子句总是会在mysql中返回相同的顺序

时间:2011-06-01 20:50:06

标签: mysql

好的,所以我有这个查询

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

3 个答案:

答案 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与子选择

一起使用

enter image description here 编码恐怖

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)