这就是我想做的,但 MySQL 似乎不接受它。
SELECT Name, Content, Lft, Rht FROM Articles WHERE
(Lft > (SELECT Lft FROM Articles WHERE idArticle = 1))
AND WHERE
(Rht < (SELECT Rht FROM Articles WHERE idArticle = 1));
我正在实现 modified preorder tree transversal 算法,我想使用单个数据库查询获取 Article
的所有子项。
文章表如下所示:
Articles +=============+===========+ | Type | Name | +=============+===========+ | VARCHAR(45) | Name | +-------------+-----------+ | LONGTEXT | Content | +-------------+-----------+ | INT | Lft | +-------------+-----------+ | INT | Rht | +-------------+-----------+ | INT | idArticle | +-------------+-----------+
idArticle
是主键,Lft
和Rht
列有UNIQUE索引。
如何完成这样的事情?
*注意:我目前正在使用 MySQL,但我想尽可能避免任何 MySQL 扩展,因为有可能计划在未来的某个时候迁移到另一个数据库,如 Postgres 或 Oracle ...
最佳答案
它不被接受,因为 WHERE 关键字只能在查询中出现一次(在子查询之外):
SELECT x.name,
x.content,
x.lft,
x.rht
FROM ARTICLES x
WHERE EXISTS(SELECT NULL
FROM ARTICLES y
WHERE y.idarticle = 1
AND y.lft < x.lft)
AND EXISTS(SELECT NULL
FROM ARTICLES z
WHERE z.idarticle = 1
AND z.rht > x.rht)
关于sql - 如何将单行列转换为 SQL 中的标量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3930030/