2013-10-04 23 views
0

我期待執行一個查詢,該查詢將從mySQL中的多個表中返回數據,這將需要一些子查詢但是我不確定如果我試圖實現甚至可能在單程。mySQL子查詢 - 如果可能的話一次通過

我有以下爲例(我知道這不工作,但給你的想法)

SELECT field_id, field_1, 
    (SELECT subfield_1 FROM tableb WHERE subfield_id = field_3) AS field_a, 
    (SELECT subfield_1 FROM tableb WHERE subfield_id = field_4) as field_b 
FROM tablea WHERE field_2 = 123 

這將拉動基於2分不同的列在主表中的第二臺2項。

tablea 
---------- 
field_id, bigint 
field_1, varchar(50) 
field_2, int 
field_3, bigint 
field_4, bigint 

tableb 
---------- 
subfield_id, bigint 
subfield_1, varchar(50) 

回答

0

使用JOIN個主鍵。根據field_3field_4是否NULL能夠或不使用任何LEFT JOIN(如下面的例子中)或INNER JOIN

SELECT field_id, field_1, b1.subfield_1 field_a, b2.subfield_1 field_b 
    FROM tablea a LEFT JOIN tableb b1 
    ON a.field_3 = b1.subfield_id LEFT JOIN tableb b2 
    ON a.field_4 = b2.subfield_id 
WHERE a.field_2 = 123 

輸出示例:

 
| FIELD_ID | FIELD_1 | FIELD_A | FIELD_B | 
|----------|---------|-----------|-----------| 
|  1 |  11 | subvalue1 | subvalue5 | 
|  2 |  22 | subvalue4 | subvalue2 | 
|  3 |  33 | subvalue2 | (null) |  

注:請確保您有指數上field_3field_4

這裏是SQLFiddle演示

+0

@ user2843145有沒有幫助?你的問題需要更多幫助嗎? – peterm

0

只有當您的子查詢返回一行時,您纔有可能實現的。 例如這裏

(SELECT subfield_1 FROM tableb  WHERE subfield_id = field_3) 

場3應該是表B

0

您可以執行outer join,您將看到相同的結果,而不必延遲使用correlated subquery

外連接的優點是,將顯示tablea的所有行,而不管在tableb子查詢中是否有伴隨值。

一個正常的加入反而會只返回所有三個表包含field_3field_4,並因此將不返回FIELD_ID = 3的行的行。

例子:

SELECT field_id, 
     field_1, 
     s1.subfield_1 as field_a, 
     s2.subfield_1 as field_b 
FROM tablea AS a 
LEFT JOIN tableb AS s1 ON a.field_3 = s1.subfield_id 
LEFT JOIN tableb AS s2 ON a.field_4 = s2.subfield_id 
WHERE field_2 = 123;