MySQL加入两个有条件的表

时间:2015-05-27 13:32:24

标签: mysql database

基于这两个表:

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。

2 个答案:

答案 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。