假设我有下表,这是一个熟悉的示例。
+----------------------------------+
| TAGS |
+--------+-------------+-----------+
| tag_id | tag_name | parent_id |
+--------+-------------+-----------+
| 1 | programming | NULL |
| 2 | php | 1 |
| 3 | class | 2 |
| 4 | object | 2 |
| 5 | method | 3 |
+--------+-------------+-----------+
我正在尝试设计一个查询,根据初始 select 语句的值选择关联的 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
可能有效,但我无法完全使其发挥作用。
最佳答案
试试这个:
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';
输出
| TAG_ID | TAG_NAME | PARENT_ID |
|--------|----------|-----------|
| 4 | object | 2 |
| 2 | php | 1 |
关于mysql - 使用联合中第二个选择的第一个选择的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27325603/