2011-12-14 92 views
-1

假定以下表: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其中fk_id是100使用的採樣數據中提供的所有foo其中fk_id是100和所有foo組合,我需要fk_id = 1 ,2(這些具有fk_id = 100)和5(這是由foo組成的foo,其具有fk_id = 100)。

SQL應該是什麼樣子?

編輯1:

兩個查詢我認爲需要進行組合:

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 ??? 

回答

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重複,因爲它匹配的兩倍。如果你不想要,可以嘗試添加「獨特」 - 醜陋但可用。

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_idchild_id(示例數據和示例查詢以不同方式引用此列)。

+0

這將不會返回組合ID。 – 2011-12-14 08:35:03

+0

對。我想我需要`聯合',但不知何故在第二個查詢中引用第一個查詢的結果。 – StackOverflowNewbie 2011-12-14 08:42:18

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); 
相關問題