基于这两个表:
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中获取所有活动的产品以及它们的活动变体。
这些表之间的关系MasterID
- > ID
需要的结果:
ID (master) | Name | No
--------------------------------------------------
1 | Shirt | 100
1 | Red | 101
我尝试使用union,但后来我无法获得所属的MasterID。
答案 0 :(得分:1)
这应该会给你预期的结果:
select * from products left join variants on products.id = variants.masterId
where products.active=1 and variants.active=1
如果没有,请将预期结果添加到您的问题中。
答案 1 :(得分: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
。 No列可以隐式地以这种方式排序(没有真实数据就不可能知道),在这种情况下可以删除RowType
列。可能需要更改order by
子句以匹配您的特定RDBMS。