2015-05-27 29 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