簡體   English   中英

SQL JOIN:怎么辦?

[英]SQL JOIN: how to do?

說我有下表:

================
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。

你可以用子查詢來做到

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

或像其他建議一樣加入2次

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

這樣,您就可以訪問兩個表中的第一個字段,只需將其擴展到所需的字段即可

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM