MySQL - 在 SELECT 子句中

标签 mysql sql

是否可以在 MySQL 的 SELECT 子句中调用 while 语句?

这是我想做的一个例子:

CREATE TABLE `item` (
  `id` int,
  `parentId` int,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`),
  KEY `FK_parentId` (`parentId`),
  CONSTRAINT `FK_parentId` FOREIGN KEY (`parentId`) REFERENCES `item` (`id`)
);

我想选择每个项目的根,即更高的祖先(没有 parentId 的项目)。在我看来,我会做这样的事情:

select 
    `id` as 'ID',
    while `parentId` is not null do `id` = `parentId` end while as 'Root ID'
from
    `item`

这当然不行。实现类似目标的更好方法是什么?

编辑

这里是一个示例数据:

id  |   parentId
1   |   NULL
2   |   1
3   |   2
4   |   2
5   |   3
6   |   NULL
7   |   6
8   |   7
9   |   7

预期结果:

ID  |   RootId
1   |   NULL
2   |   1
3   |   1
4   |   1
5   |   1
6   |   NULL
7   |   6
8   |   6
9   |   6

谢谢。

最佳答案

只需使用CASE

select 
    `id` as 'ID',
    CASE `parentId` WHEN is not null THEN `parentId` END as 'Root ID'
from
    `item`

关于MySQL - 在 SELECT 子句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34790941/

相关文章:

asp.net - 服务器标记的格式不正确。查询字符串和数据绑定(bind)

MySQL 仅在值存在时才加入一列

mysql - Workbench 模型同步/Forward Engineer 可能存在错误?

mysql - 如何将mysql中的行分组为具有特定大小的 block

Mysql - 创建 View 组合 2 个表但仅通过选择合并而不合并表

MYSQL 多参数搜索

mysql - 警告 : mysql_query(): Access denied for user

php - MYSQL JOIN 递增 id

MySQL动态搜索查询程序

mysql - 获取按其中之一分组的行子集