2013-11-26 59 views
0

例如,如果我有在MySQL數據庫中這三個表:加入兩個以上的表上的相同的列

表1:wood_items(列:wood_item_id,ITEM_NAME,寬度,高度,厚度,價格)

表2:other_items(列:other_items_id,ITEM_NAME,價格)

表3:交易(列:TRANSACTION_ID,ITEM_ID,價格)

我想加盟交易表兩者wood_itemsother_items上ITEM_ID表,所以它會顯示完成的所有交易(顯示的列:TRANSACTION_ID,ITEM_NAME,價格),無論它是否是一個wood_item或一個other_item。它可能與Java中的繼承有相似的概念,因爲木材項目other_items應該是項目

是否可以做到這一點?如果是這樣,如何;但如果我不能,創建類似結構/結果的最佳方式是什麼?

+0

你想從查詢中得到什麼字段? –

+0

@FilipeSilva我完全忘了把它放在問題上。修正了這個問題。它是transaction_id,item_name和price。謝謝! – Vhutama

+0

查看我的答案與聯盟它應該適合您的需求 – ceyquem

回答

3

如果可以的話,我會重組你的桌子,因爲桌子只能有一個items桌子,你當然可以有另一個桌子categories,比如「木頭」。

如果不成功,您可以使用LEFT JOIN刪除兩個表中存在匹配索引的要求。

SELECT cols FROM 
transaction 
LEFT JOIN wood_items ON (wood_item_id = item_id) 
LEFT JOIN other_items ON (other_items_id = item_id) 
WHERE 
    -- Ensures that there is a match in at least one of the tables 
    wood_item_id IS NOT NULL 
    OR other_items_id IS NOT NULL 
0

你可以以後做wood_items和other_items之間的聯盟加入,但對於這一點,你需要有木等,這樣的事情應該工作之間的列一個固定數量,如果你只選擇了「ID」列(我添加了一個類型字段,使這臺之間它來自一個差):

(SELECT T.transaction_id, T.item_id, T.price, W.item_name AS item_name, W.price AS item_price 
FROM transaction T 
LEFT JOIN wood_items W ON W.wood_items.wood_item_id = T.transaction.item_id) 
UNION (SELECT T.transaction_id, T.item_id, T.price, , O.item_name AS item_name, O.price AS item_price 
FROM transaction T 
LEFT JOIN other_tiems O On O.other_items.other_items_id = T.transaction.item_id); 

編輯:我中有你所需要的,它應該工作,只要你想的字段。