gpt4 book ai didi

mysql - 使用另一个字段的值作为左连接的默认值

转载 作者:行者123 更新时间:2023-11-30 00:28:53 31 4
gpt4 key购买 nike

我有以下 3 个表:

users
| id | name | address |
|----+-------+----------+
| 1 | user1 | address1 |
| 2 | user2 | address2 |

locations
| id | user_id | name |
|----+---------+-----------+
| 1 | 1 | location1 |
| 2 | 1 | location2 |
| 3 | 2 | location3 |

orders
| id | user_id | from_id | to_id |
|----+---------+---------+-------+
| 1 | 1 | 1 | 2 |
| 2 | 1 | 1 | 0 |

from_id 或 to_id 可以为 0,这意味着在本例中使用了用户的地址。

在这些表上执行“简单”连接:

SELECT u.name uname, fl.location flocation, tl.location tlocation
FROM users u, orders o, locations fl, locations tl
WHERE u.id = o.user_id
AND o.from_id = fl.id
AND o.to_id = tl.id

不显示带0的记录:

user1 | location1 | location2

我想看到的是以下数据:

user1 | location1 | location2
user1 | location1 | address1

使用mysql,有没有办法扩展连接来显示这样的结果?

最佳答案

下面的 SQL 应该可以做到这一点:

SELECT u.name uname, IF(fl.id, fl.location, u.address) AS flocation, IF(tl.id, tl.location, u.address) AS tlocation
FROM users u
INNER JOIN orders o ON u.id = o.user_id
LEFT JOIN locations fl ON o.from_id = fl.id
LEFT JOIN locations tl ON o.to_id = tl.id;

如果我可以提出建议,我建议您不要使用 WHERE 子句作为连接表的方式。

关于mysql - 使用另一个字段的值作为左连接的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22670888/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com