基于以下两个表: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。
最佳答案
看起来您只需要一个简单的连接:
选择 *
从产品
左联接变体
在products.ID = variants.MasterID上
其中product.Active = 1
和variants.Active = 1
要求更加明确之后的更新:
选择ID,名称,否,“产品”作为RowType
从产品
主动= 1
联盟
选择variants.MasterID作为ID,variants.Name,variants.No,“ variants”作为RowType
从产品
连接变体
在products.ID = variants.MasterID上
其中product.Active = 1
和variants.Active = 1
按ID,RowType,No排序
我假设您希望结果按ID排序,先后依次是products
和variants
。 No列可能以这种方式隐式排序(没有实际数据是不可能知道的),在这种情况下,可以删除RowType
列。 order by
子句可能需要更改以匹配您的特定RDBMS。
关于mysql - MySQL连接两个有条件的表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30484036/