mysql - 如果第一个parent_id级别> 1而不是id级别,则生成值为1的列

标签 mysql sql sql-server postgresql

我想从表中获取所有数据,并在具有此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;

最佳答案

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 的行。否则按钮= 0

关于mysql - 如果第一个parent_id级别> 1而不是id级别,则生成值为1的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25407333/

相关文章:

php - Mysql Join inner join left join Multiple Tables null on right table

mysql - SQL查找重复行

Mysql查询需要优化

mysql - 客户数据库结构

python - Django 多对一删除

sql - 查询获取不活跃用户

mysql - 退出 MySQL 而不在 El Capitan 上重新启动

java - Java 中的 SQL 发送到两个表但有错误

php - 如何从字符串中的特定字段中删除引号?

c# - 在 ASP.NET 项目中将数据类型从 Oracle 转换为 SQL Server