簡體   English   中英

Mysql子查詢聯接表

[英]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.

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