mysql - 使用联合中第二个选择的第一个选择的值?

标签 mysql sql select join union

假设我有下表,这是一个熟悉的示例。

+----------------------------------+
|              TAGS                |
+--------+-------------+-----------+
| tag_id |   tag_name  | parent_id |
+--------+-------------+-----------+
|   1    | programming |    NULL   |
|   2    |     php     |      1    |
|   3    |    class    |      2    |
|   4    |    object   |      2    |
|   5    |    method   |      3    |
+--------+-------------+-----------+

我正在尝试设计一个查询,根据初始 select 语句的值选择关联的 parent_idtag_name

类似这样的事情:

SELECT * FROM tags AS child
WHERE child.tag_name = 'object'
UNION
SELECT * FROM tags AS parent
WHERE parent.parent_id = child.parent_id

我需要能够从这两个查询返回组合行,这就是我使用UNION的原因。

预期结果应该是:

+--------+-------------+-----------+
| tag_id |   tag_name  | parent_id |
+--------+-------------+-----------+
|   2    |     php     |      1    |
|   4    |    object   |      2    |
+--------+-------------+-----------+

我还认为 JOIN 可能有效,但我无法完全使其发挥作用。

最佳答案

试试这个:

SELECT tag_id, tag_name, parent_id  
FROM tags AS child
WHERE child.tag_name = 'object'
UNION
SELECT parent.tag_id, parent.tag_name, parent.parent_id  
FROM tags AS parent
INNER JOIN tags AS child ON parent.tag_id = child.parent_id AND child.tag_name = 'object';

检查SQL FIDDLE DEMO

输出

| TAG_ID | TAG_NAME | PARENT_ID |
|--------|----------|-----------|
|      4 |   object |         2 |
|      2 |      php |         1 |

关于mysql - 使用联合中第二个选择的第一个选择的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27325603/

相关文章:

mysql - hibernate生成错误的sql "select max(id) from my_table"

php - 插入具有运行余额的行

jquery - 使用 jquery mobile 进行选择导航

mysql - 什么时候应该对 MySQL 中的数据进行非规范化?

mysql - Grails 中的 Cloud Foundry v2

mysql - 如何从csv文件中获取数据并用mysql保存到grails中?

php - 向数组添加默认值

php - 查询数据库中某个区域的位置

mysql - MAX 或 ALL in sql

sql - 当连接列具有不同名称时,如何连接两个表?