2017-07-28 101 views
0

您好我需要從一個數據庫中的數據,但我無法弄清楚如何做到這一點的是...MYSQL加入2和表2間的關係表

他們有「精品店」表和「boutiques_categories」和它們之間的關係表名「boutiques_categories_categories」

在這裏,他們是如何設置的:

boutiques 
id name 
1  X_boutiques2_name 
2  Y_boutiques_name 

Boutique2 
id name 
1 X_boutiques2_name 
2 Y_boutiques2_name 

boutiques_categories 
id name 
1 X_categorie_name 
2 Y_categorie_name 

boutiques_categories_categories 
boutique_id    categorie_id 
X_boutique_id   X_categorie_id 
Y_boutique_id   Y_categorie_id 

我想創建一個SQL像這樣的數據的合併和打印CSV:

export 
boutiques_id boutique_name  boutiques_categories_categorie_name 
boutiques2_id boutique2_name boutiques_categories_categorie_name 

我想UNION的2臺

SELECT A.* 
FROM boutiques A 
UNION select B.* FROM boutiques2 B 

,它的工作,但現在我需要加入categorie名字給它,我無法弄清楚如何做到這一點。試過:

SELECT A.* 
FROM boutiques A 
UNION select B.* 
FROM boutiques2 B 
left join 
    boutiques_categories BC ON BC.id = 
    (
    SELECT BCC.categorie_id 
    FORM 
     boutiques_categories_categories BCC 
    WHERE BCC.boutique_id = BC.id 
    ) 

但我得到MYSQL錯誤,我無法解決。

#1242 - Subquery returns more than 1 row 

謝謝你的時間。

+0

你並不需要使用'union'。這用於將多個select語句作爲單個結果返回。 'join'語法就是你所需要的。 – RToyo

+0

但我確實需要有多個選擇語句,因爲我需要從精品店和精品店2中選擇數據,然後將類別名稱添加到精品數據中。 –

+1

對不起,我剛剛重新閱讀您的問題後編輯我的評論。你對工會是對的。如果沒有其他人在此期間回答,我會很快寫出一個查詢。 – RToyo

回答

2

您可以將工會(或union all,取決於您想要的數據)boutiquesBoutique2納入派生表中,然後通過boutiques_categories_categories將它加入boutiques_categories。

雖然您包含在您的問題中的表格數據看起來並不完全準確。具體來說:精品店_ categories_categories包含boutique_id和categorie_id值,這些值與關聯表的id列不匹配。我只是假設boutiques_categories_categories具有int ID值。如果情況並非如此,請在評論中澄清,我可以適當調整查詢。

給這個查詢一個嘗試,看看它是否會返回您所期望的數據:

select 
    b.id, b.name, c.name 
from 
    -- Get the boutiques rows from the unioned tables 
    (
     select id, name from boutiques 
     union 
     select id, name from Boutique2 
    ) as b 
    -- Join in boutiques_cateogires_categories 
    join boutiques_categories_categories cc 
     on (b.id=cc.boutique_id) 
    -- Join in boutiques_categories 
    join boutiques_categories c 
     on (cc.categorie_id=c.id) 
+0

謝謝!這正是我需要的!對不起,如果我的問題不是很清楚,但你說得對。 –

+1

@SebastienB。很高興它對你有效!不要擔心你的問題。爲了將來的參考,最好提供一個確切的數據示例,然後分別解釋。因此,不要在'boutique_id'列中寫入'X_boutique_id',而應該只寫'1',然後用問題的主體來解釋「boutique_id列與精品表中的id匹配」。 – RToyo