使用第一个选择的值进行第二次选择联合?

时间:2014-12-05 22:19:58

标签: 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可能有效,但我无法使其发挥作用。

3 个答案:

答案 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';

检查SQL FIDDLE DEMO

<强>输出

| 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