MySQL:在另一个子查询中使用子查询的结果?

时间:2011-12-14 07:58:58

标签: mysql

假设以下表格:

TABLE: foo
=========================
| foo_id | fk_id | name |
=========================
| 1      | 100   | A    |
| 2      | 100   | B    |
| 3      | 200   | C    |
| 4      | 200   | D    |
| 5      |       | E    |
| 6      |       | F    |
-------------------------

TABLE: foo_combo
===============================================
| foo_combo_id | parent_foo_id | child_foo_id |
===============================================
| 1            | 5             | 1            |
| 2            | 5             | 2            |
| 3            | 6             | 3            |
| 4            | 6             | 4            |
-----------------------------------------------

我需要获取foo为100的所有fk_id以及由foo组成的所有foo组合,其中fk_id为100。提供的示例数据,我需要fk_id = 1,2,(这些有fk_id = 100)和5(这是由foo组成的foo fk_id SELECT * FROM foo WHERE fk_id = 100 SELECT foo.* FROM foo, foo_combo WHERE foo_combo.child_id IN (SELECT foo_id FROM foo WHERE fk_id = 100) AND foo.foo_id = foo_combo.parent_foo_id ??? {{1}} 1}} = 100)。

SQL应该是什么样的?

编辑1:

我认为需要合并的两个查询:

{{1}}

3 个答案:

答案 0 :(得分:0)

我认为这就是你所追求的目标:

select f.*
from foo f
inner join foo_combo fc on fc.child_foo_id = f.foo_id
where f.fk_id = 100;

虽然我不确定foo_combo表上的列是child_foo_id还是child_id(示例数据和示例查询以不同方式引用此列)。

答案 1 :(得分:0)

select foo_id from (
  select foo_id, fk_id from foo 
    union all
  select c.parent_foo_id, f.fk_id from foo_combo c inner join foo f on (c.child_foo_id = f.foo_id)
) foo_union where fk_id = 100;

应返回类似

的内容
+--------+
| foo_id |
+--------+
|      1 |
|      2 |
|      5 |
|      5 |
+--------+

重复5,因为它匹配两次。如果您不想这样,请尝试添加“distinct” - 丑陋但可以使用。

答案 2 :(得分:0)

SELECT * FROM (
    SELECT foo_id FROM foo
    WHERE fk_id = 100
    UNION
    SELECT foo_id FROM foo f
    JOIN foo_combo c ON f.foo_id = c.parent_foo_id
    WHERE fk_id = 100
    UNION
    SELECT foo_id FROM foo f
    JOIN foo_combo c ON f.foo_id = c.parent_foo_id
    WHERE fk_id = 100) as ids
JOIN foo USING(foo_id);