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
之间 关系。
答
它看起来像你只需要一个简单的连接:
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。
答
这应该让你期望的结果:
select * from products left join variants on products.id = variants.masterId
where products.active=1 and variants.active=1
如果没有请加上预期的结果你的问题。
+0
添加了预期的结果...'select *'返回每个产品的色谱柱,如果它是变体。 – frgtv10
一个侧面的问题,为什么ids相同的多个产品?根据我的知识,ID应该是唯一的。 –
@PrerakSola只是想问一下,Id和MasterId这两个表之间的关系? –
Updatetd的问题,谢谢你们。 – frgtv10