我希望从表中获取所有数据,并在运行时生成一个值为1的列,该列位于具有此parent_id的条目的父级。它应与“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;
答案 0 :(得分:0)
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
的行。其他button = 0
。