2010-12-06 14 views
0

は、私は以下の表を持って言ってやるがいい値table_two_id考えるSQL JOIN:どうやって?

================ 
table_one 
================ 
- table_one_id (PK) 
- field_1 
- field_2 


================ 
table_map 
================ 
- table_one_id 
- table_two_id 


================ 
table_two 
================ 
- table_two_id (PK) 
- field_1 
- field_2 

を、私はtable_one内のすべてのレコードを必要とするtable_two table_one-> table_one_id = table_map-> table_one_id、table_map-> table_two_id =の列に参加しましたtable_two-> table_two_id。あなたは

select * from table_one where table_one_id in 
    (select table_one_id from table_map where table_tow_id = my_value) 

または2と同じように、サブクエリでそれを行うことができます

答えて

0
SELECT t1.field_1 as t1_field1, t2.field_1 as t2_field2 
FROM table_one t1, table_map m, table_two t2 
WHERE 
    m.table_two_id=123 
AND t1.table_one_id=m.table_one_id 
AND t2.table_two_id=m.table_two_id

を提案、どのフィールドに必要なだけ広げる

0

は他と同様に加入そのようなことは、あなたが両方のテーブルの最初のフィールドにアクセスできるようになります

0
SELECT t1.* FROM table_one t1 
    JOIN table_map t2 ON t1.table_one_id = t2.table_one_id 
    WHERE t2.table_two_id = X 
0
SELECT * 
FROM table_one 
CROSS JOIN table_map USING(table_one_id) 
CROSS JOIN table_two USING(table_two_id); 

これは、一致する行を持つtable1、table2、table3のすべての行を選択します。あなたはtable_oneからすべての行を選択し、table_mapを通じてtable_twoでいくつかの一致を検索しようとする必要がある場合は 、これを使用する:

SELECT * 
FROM table_one 
LEFT JOIN table_map USING(table_one_id) 
CROSS JOIN table_two USING(table_two_id); 

- すべての行をtable_oneから。一致する行が見つからなかった場合、対応する列にNULLが返されます。

USINGクエリが一致する名前を持つ列を使用することを意味:

USING(table_one_id) 

をと同等です:

ON(table_one.table_one_id = table_map.table_one_id) 
関連する問題