让我们说下面的表格是一个熟悉的例子。
+----------------------------------+
| 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
可能有效,但我无法使其发挥作用。
答案 0 :(得分:2)
试试这个:
SELECT *
FROM tags t1, tags t2
WHERE t1.parent_id = t2.parent_id AND t1.tag_name = 'object';
答案 1 :(得分:2)
试试这个:
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 |
答案 2 :(得分:0)
如果你想要tag_name =&#39; object&#39;要返回&#39; php&#39;,你需要将child.parent_id等同于parent.tag_id(而不是父对象彼此)
...
WHERE parent.parent_id = child.parent_id