如果第一个parent_id级别> 1,则生成值为1的列。 1比id级别

时间:2014-08-20 14:27:21

标签: mysql sql sql-server postgresql

我希望从表中获取所有数据,并在运行时生成一个值为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;

1 个答案:

答案 0 :(得分:0)

CASEEXISTS应该适用于所有这些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