需要三个表的mysql查询

58wvjzkj  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(285)

我有三张table:

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

我正在设法以适当的折扣购买所有商品,这对每个顾客都是不同的。在这个例子中,我有一个客户,客户id为1,对item1/10/有折扣,而他对item2没有折扣。结果应该是这样的:

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

我的问题是如何构建查询。我连接前两个表并需要过滤第三个表,但我应该使用临时表还是在查询中执行查询?

csga3l58

csga3l581#

请这样做:

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

mznpcxlj

mznpcxlj2#

为了得到你想要的结果,
以下是查询。。。

select
     i.id item_id,
     d.id discount_id,
     i.name,
     i.price,
     c.name cat_name,
     d.discount
from items i
left join discount d on i.id = d.item_id
left join category c on i.cat_id = c.id
where d.client_id = 1 or d.client_id is null;
/*where condition added after update as OP required*/

更新
根据op的意见

select
    i.id item_id,d.id discount_id,
    i.name,i.price,c.name cat_name,d.discount
from discount d
left join items i on i.id = d.item_id
left join category c on i.cat_id = c.id
where d.client_id = 2;
qni6mghb

qni6mghb3#

这是一个简单的sql查询。

Select Id, Name, Price, Cat, Discount From Items
left join discount on Items.id=discount.Item_Id 
left join category on Items.cat_id=id

输出如下:

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

相关问题