【发布时间】:2014-08-20 14:27:21
【问题描述】:
我想从表中获取所有数据,并在具有此 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;
【问题讨论】:
-
这在使用 Postgres 和 SQL Server 时会很容易,但对于 MySQL 来说却非常困难,因为它缺乏现代 SQL 功能。
-
@a_horse_with_no_name 虽然我同意,但令人惊讶的是 MySQL 用户可以使用查询变量模拟/伪造有多少现代 SQL 功能。有时真的希望我们在 PostgreSQL 中有这些。
-
为什么您需要它才能在所有这些 RDBMS 中工作?试图保持“db-agnostic”是一个很大的痛苦,而且很容易出错。
-
它必须在 cms 上工作
-
@ChrisGitare 那么 CMS 需要支持动态查询调度,它可以在有通用查询的情况下进行查询,然后覆盖使用的不同数据库(如果提供)。因此,您可以编写“SQL Standard(ish)”查询(通常适用于 PostgreSQL、MS SQL Server)、“funky Oracle 查询”和“MySQL 过程查询”。可悲的是,尝试编写与 DB 无关的逻辑繁重的查询注定要失败。
标签: mysql sql sql-server postgresql