[英]Mysql SubQueries to join tables
我的問題如下:
我有3個內容表:
tableA:|ID_A|field1|field2|field3| => base table
tableB:|ID_B | ID_C |ID_A| => Mapping Table
tableC:|ID_C |FieldToGet| => Additional info field table
*重要假設:可能有多個ID_C值與同一個ID_A相關聯,使得tableB:具有以下結構:
| ID_B | ID_C | ID_A|
| 24 | 81 | 23 |
| 25 | 11 | 23 |
| 26 | 82 | 23 |
| 27 | 42 | 24 |
| 28 | 113 | 33 |
但是如果單個ID_A有多個ID_B,則它們將彼此跟隨。
現在,我正在編寫一個php腳本來獲取某個ID_A所需的字段,但是由於我的子查詢返回多行而失敗了:
$q = $this->dao->prepare('SELECT FieldToGet FROM table3 WHERE ID_C = ( SELECT ID_C FROM table2 WHERE ID_A =$SOME_ID_A )');
我正在尋找一個僅從列FieldToGet中獲取結果的解決方案(我當前的嘗試),或者是一個將通過FieldToGet列加入整個基表的解決方案(不確定如何使用JOIN操作)。
聯接看起來像這樣,
SELECT a.*, c.* -- select the columns you want to get
FROM tableA a
INNER JOIN tableB b
ON a.ID_A = b.ID_A
INNER JOIN tableC c
ON b.ID_C = c.ID_C
要完全了解有關聯接的知識,請訪問以下鏈接:
不完全確定我了解您的需求。 @JW正確顯示了如何使用INNER JOIN將3個表連接在一起。
您的查詢非常接近。 而不是使用WHERE ID_C =,您應該使用WHERE ID_C IN()。
SELECT FieldToGet
FROM table3
WHERE ID_C IN (SELECT ID_C FROM table2 WHERE ID_A =$SOME_ID_A)
我個人更喜歡使用JOIN而不是IN,但根據您的數據庫結構,使用IN實際上可能會更好,因為使用JOIN可能會返回多個結果,並且需要使用DISTINCT或GROUP BY。 這是我讀到的一篇好文章:
http://explainextended.com/2009/06/16/in-vs-join-vs-exists/
還有一個:
https://stackoverflow.com/a/4755644/1073631
祝好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.