两个MySQL函数独立工作但不能合并(RAND()?)

时间:2012-01-25 05:15:51

标签: mysql

两个MySQL函数独立地按预期工作,但它们一起返回随机结果。考虑这两个问题:

查询1

这显然返回id=8明显的行:

SELECT * FROM table_categories WHERE id = 8

查询2

根据我的表设置,这始终返回1到16之间的数字:

SELECT cat.id FROM table_categories cat 
LEFT JOIN table_user_to_category u2c 
ON u2c.cat_id = cat.id AND u2c.user_id = 0 
ORDER BY IFNULL(u2c.count,0), RAND() LIMIT 1

联合

奇怪的是,这有时会从table_categories返回一行,有时会返回2行,有时会返回3行,有时甚至没有。到底是什么?

SELECT * FROM table_categories WHERE id = (
SELECT cat.id FROM table_categories cat 
LEFT JOIN table_user_to_category u2c 
ON u2c.cat_id = cat.id AND u2c.user_id = 0 
ORDER BY IFNULL(u2c.count,0), RAND() LIMIT 1)

这是因为RAND()吗?我想不出来!对我来说似乎很奇怪,但我是一个相对新手。

1 个答案:

答案 0 :(得分:0)

您确定id被定义为UNIQUE还是PRIMARY KEY?否则,您可以轻松地拥有多个具有相同ID的行,如果随机数选择它们,则会返回这些行。