2010-03-24 93 views
1

我有表:MySQL的 - 連接三個表與具有

id name type 

其中「類型」是1或2

我要加入這個表與其他兩個。 「type = 1」的行應該與第一個表連接,並且= 2與第二個連接。

例如,主表包含人們所做的一些事件。拳頭表加入是關於人的信息,其次是關於女性。類型是性。
我需要把最後10個事件與關於這些人的所有信息。

喜歡的東西

SELECT * 
FROM tbl 
INNER JOIN tbl_1 ON tbl.name = tbl_1.name HAVING tbl.type = 1 
INNER JOIN tbl_2 ON tbl.name = tbl_2.name HAVING tbl.type = 2 

但它不工作。
它是如何實現的?

回答

2

首先,HAVING子句用於分組,而不是連接。只要爲ON子句中的條件

ON tbl.name = tbl_1.name AND tbl.type = 1 

其次,如果條件沒有兌現,該行不會出現在內部連接的結果。由於字段(tbl.type)不能有兩個不同的值,因此不會生成任何行。改爲嘗試左外連接。

SELECT * 
    FROM tbl 
    LEFT JOIN tbl_1 ON tbl.name = tbl_1.name AND tbl.type = 1 
    LEFT JOIN tbl_2 ON tbl.name = tbl_2.name AND tbl.type = 2 

但是,這帶來了一個問題:你爲什麼不能讓結果中的所有領域,而忽略你不關心的人?

+0

應該指出LEFT(OUTER)JOIN和INNER JOIN之間的區別。 INNER JOIN不會給你任何結果。 – erikkallen 2010-03-24 22:13:52

1

它看起來像你試圖將兩個單獨的數據集合在一起 - 你有沒有考慮過在兩個查詢中使用Union All?例如:


select * from tbl inner join tbl_1 on tbl.name = tbl1.name where tbl.type = 1 
union all 
select * from tbl inner join tbl_2 on tbl.name = tbl2.name where tbl.type = 1 

這當然假設您的兩個連接表具有相同的列配置。

使用Having在這種情況下沒有意義,因爲您沒有執行聚合查詢。