sql - 如何将单行列转换为 SQL 中的标量?

标签 sql mysql

这就是我想做的,但 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是主键,LftRht列有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/

相关文章:

mysql - SQL 默认 NOW()(UTC)

java - 使用 java、DB2、spring 和 hibernate 连接来自两个不同库的两个表

java - 在 JdbcTemplate 中处理列空值

python - 如何通过 Python 通过 ssh 连接到 mysql

android - MySQL 没有启动 : [ERROR] Failed to create a socket for IPv4 '127.0.0.1' : errno: 13

php - 按类别对结果进行分组,然后将结果分成几天?

MySQL - 在单独的列中显示两个内部联接

php - 将 php 代码实现为 html 或仅使用 php 会更快吗?查看更多详情

java - Android Studio 如何将我的项目与 mySQL db 连接(新闻提要应用程序)

java - Hibernate删除user和user_type而不是只删除user