我有三个表:

Items:
Id   |Name   | Price    | Cat_Id
---- |-------|----------------
 1   | Item1 |   50.00  | 1
 2   | Item2 |   25.20  | 5

Category:
Id   |Name  |
---- |------|
 1   | Cat1 |
 2   | Cat2 |

Discount:
Id   |Item_Id| Client_Id|Discount
---- |-------|----------------
 1   |   1   |   1      | 10
 2   |   1   |   2      | 15
 3   |   2   |   2      | 6


我正在尝试为所有商品提供适当的折扣,这对每个客户而言都是不同的。在此示例中,我的客户具有Client_Id 1,该客户的Item1 / 10 /有折扣,而他没有Item2的折扣。
结果应如下所示:

Id   |Name   | Price    | Cat | Discount
---- |-------|----------------|----------
 1   | Item1 |   50.00  | Cat1|   10
 2   | Item2 |   25.20  | Cat5|   0


我的问题是构建查询的方式是什么。我加入了前两个表并需要过滤第三个表,但是我应该使用临时表还是在查询中进行查询?

最佳答案

尝试这种方式:

select di.id,di.Client_Id,it.Name,it.Price,ca.Cat,ifnull(di.Discount,0)
from Discount di
    right join Items it on di.Item_id=it.Id
    left join Category ca on it.Cat_Id=ca.Id
order by di_Id,di.Client_id,It.Name


您可以从折扣中获取所有行,然后获取所有项目并查找类别。如果一个商品没有折扣(空),您将得到0

关于mysql - 需要从三个表中查询MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49916760/

10-16 18:53