问题描述
我只想用我在最后一个表中显示的结果中的项目表中的名称替换引用 ID
第一个表和父表
id | item | 数量 | 税金 | 状态 |
---|---|---|---|---|
1 | 4 | 20 | 2 | Y |
2 | 5 | 15 | 1 | N |
3 | 6 | 5 | 0 | N |
第二个表和子表
id | item | p_id | 数量 | 税 |
---|---|---|---|---|
1 | 1 | 1 | 10 | 1 |
2 | 2 | 2 | 10 | 1 |
3 | 3 | 1 | 15 | 1 |
第三张桌子
id | item |
---|---|
1 | 移动 |
2 | 加热器 |
3 | 鼠标 |
4 | 电子 |
5 | 软件 |
6 | 论文 |
我从这段代码中得到了什么
SELECT IFNULL(child.item,parent.item) AS item,IFNULL(child.amount,parent.amount) AS amount,IFNULL(child.tax,parent.tax) AS tax
FROM parent
LEFT JOIN child ON parent.id = child.p_id
item | 数量 | 税 |
---|---|---|
1 | 10 | 1 |
2 | 10 | 1 |
3 | 15 | 1 |
5 | 15 | 1 |
6 | 5 | 0 |
我想要的是
item | 数量 | 税 |
---|---|---|
手机 | 10 | 1 |
加热器 | 10 | 1 |
鼠标 | 15 | 1 |
软件 | 15 | 1 |
论文 | 5 | 0 |
请帮我实现这个
解决方法
只需使用您已在查询中显示的商品 ID 加入商品表:
SELECT
i.item,COALESCE(c.amount,p.amount) AS amount,COALESCE(c.tax,p.tax) AS tax
FROM parent p
LEFT JOIN child c ON c.p_id = p.id
JOIN item i ON i.id = COALESCE(c.item,p.item)
ORDER BY i.item;
(我使用 COALESCE
而不是 IFNULL
,因为这是标准 SQL。但是如果您更喜欢 IFNULL
,您可以坚持使用它。)