SQL JOIN:怎么办?

时间:2010-12-06 10:31:27

标签: sql database mysql

说我有以下表格:

================
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_two_id,我需要table_one中与table_two WHERE table_one-> table_one_id = table_map-> table_one_id,table_map->中的列相关联的所有记录。 table_two_id = table_two-> table_two_id。

4 个答案:

答案 0 :(得分:0)

您可以使用

等子查询来完成此操作
  select * from table_one where table_one_id in 
    (select table_one_id from table_map where table_tow_id = my_value)

或与其他2个联接建议

答案 1 :(得分: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 

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

这样的东西可以让你访问两个表中的第一个字段,只需扩展到你想要的字段

答案 3 :(得分: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_two到table_map中找到一些匹配项,请使用:

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)