我想从表中获取所有数据,并在具有此parent_id的条目的父项处动态生成值为1的列。并且它应该与“sql server”、“postgres”、“mysql”兼容。
id,parent_id,lft,rgt,level,title,alias,access,path,checked_out
1 0 0 7 0 root root 0 root ...
2 1 1 2 1 ...
结果应该是:
id,parent_id,lft,rgt,level,**button**,title,alias,access,path,checked_out
1 0 0 7 0 1 root root 0 root 0...
2 1 1 2 1 **0** ...
这可能吗,我以前从未做过如此复杂的查询。
它应该选择所有表条目,生成一个值为 1 或 0 的新按钮列,并且这仅在其条目的父级别
类似这样但所有条目的结果:
SELECT a.id,b.id,a.level,a.level+1 as button
FROM `categories` a
JOIN `categories` b ON a.id=b.parent_id
WHERE a.id < b.id AND a.level+1 = b.level AND b.id-a.id=1;
最佳答案
CASE
和 EXISTS
应该适用于所有这些 RDBMS:
SELECT id, parent_id, lft, rgt, level
, CASE WHEN EXISTS (
SELECT 1 FROM tbl AS b
WHERE b.parent_id = a.id
AND b.level = a.level + 1
-- AND b.id > a.id -- this one is redundant
AND b.id = a.id + 1)
THEN 1 ELSE 0 END AS button
, ...
FROM tbl AS a;
这将返回具有任意子级且 button = 1
的行。否则按钮= 0
。
关于mysql - 如果第一个parent_id级别> 1而不是id级别,则生成值为1的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25407333/