基于以下两个表:

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排序,先后依次是productsvariants。 No列可能以这种方式隐式排序(没有实际数据是不可能知道的),在这种情况下,可以删除RowType列。 order by子句可能需要更改以匹配您的特定RDBMS。

关于mysql - MySQL连接两个有条件的表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30484036/

10-10 03:23