这样的查询在MySQL中是如何工作的(现在是5.6):
SELECT node.name, (COUNT(parent.name) - 1) AS depth
FROM nested_category AS node,
nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.name
ORDER BY node.lft;
我很困惑,我习惯了SQL Server,在那里它会抱怨node.lft不在所选列的列表中,但在MySQL中它很有用,
感谢您的帮助,
答案 0 :(得分:1)
你很困惑。 MySQL允许这种行为 - 不仅在order by
中,而且在having
和select
子句中也是如此。
基本上,MySQL使用来自 indeterminate 匹配行的值。一般来说,这是语言中的(错误)功能,并导致无意的错误 - 在大多数情况下。
当node.lft
的值在组中的所有行上相同时,这是合理的。但是,在这种情况下,使用像MIN(node.lft)
之类的东西会产生很少的额外开销。
关于此行为的一些注意事项:
group by
中的列,则允许列没有聚合函数。