【发布时间】:2014-12-05 22:19:57
【问题描述】:
假设我有下表,这是一个熟悉的示例。
+----------------------------------+
| TAGS |
+--------+-------------+-----------+
| tag_id | tag_name | parent_id |
+--------+-------------+-----------+
| 1 | programming | NULL |
| 2 | php | 1 |
| 3 | class | 2 |
| 4 | object | 2 |
| 5 | method | 3 |
+--------+-------------+-----------+
我正在尝试设计一个查询,该查询根据初始选择语句的值选择关联的parent_id 和tag_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 可能会起作用,但我不能让它起作用。
【问题讨论】:
-
这称为分层查询。这可能是答案:*.com/questions/8104187/mysql-hierarchical-queries。不过,请务必阅读评论中的警告。这可能很危险。
-
我不明白您是如何获得预期结果的?您想要标签名称为“object”的所有行(即第 4 行)并且想要获取具有相同 parent_id 的行?那么为什么不只返回对象和类呢?
-
由于我最初在第一次选择中选择对象,因此我需要选择父项 (php) 作为第一次查询的结果。我知道示例查询是错误的,所以我正在寻找有关如何更正它的指导。
标签: mysql sql select join union