2015-05-27 145 views
0

MySQL的加入兩個表基於這兩個表的條​​件

products

| ID   | Active | Name  | No 
-------------------------------------------------- 
| 1   | 1  | Shirt  | 100 
| 2   | 0  | Pullover | 200 

variants

| MasterID | Active | Name | No 
-------------------------------------------------- 
| 1   | 1  | Red  | 101 
| 1   | 0  | Yellow | 102 

我想每一個產品,它是活動的,也是他們積極變種一個sql。

ID (master) | Name | No 
-------------------------------------------------- 
1   | Shirt | 100 
1   | Red  | 101 

我用工會試了一下,但後來我沒能拿到屬於MasterIDs:>ID

所需的結果 - 這些表MasterID之間 關係。

+2

一個側面的問題,爲什麼ids相同的多個產品?根據我的知識,ID應該是唯一的。 –

+0

@Prera​​kSola只是想問一下,Id和MasterId這兩個表之間的關係? –

+0

Updatetd的問題,謝謝你們。 – frgtv10

回答

1

它看起來像你只需要一個簡單的連接:

 
select * 
from products 
left join variants 
    on products.ID = variants.MasterID 
where products.Active = 1 
and variants.Active = 1 

更新要求作了更爲清晰後:

 
select ID, Name, No, 'products' as RowType 
from products 
where Active = 1 
union 
select variants.MasterID as ID, variants.Name, variants.No, 'variants' as RowType 
from products 
join variants 
    on products.ID = variants.MasterID 
where products.Active = 1 
and variants.Active = 1 
order by ID, RowType, No 

我假設你想通過ID排序結果,與products,然後是variants。 「否」列可以以這種方式隱式排序(無法知道沒有真實數據),在這種情況下,可以刪除RowType列。可能需要修改order by子句以匹配您的特定RDBMS。

1

這應該讓你期望的結果:

select * from products left join variants on products.id = variants.masterId 
where products.active=1 and variants.active=1 

如果沒有請加上預期的結果你的問題。

+0

添加了預期的結果...'select *'返回每個產品的色譜柱,如果它是變體。 – frgtv10