2013-11-26 27 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); 

编辑:我中有你所需要的,它应该工作,只要你想的字段。