gpt4 book ai didi

MYSQL 内部加入 2 个 ON 子句

转载 作者:行者123 更新时间:2023-11-29 07:15:10 27 4
gpt4 key购买 nike

我正在尝试设置一个简单的数据库,其中我有一个用户并存储他们的住址和邮政地址。我有2张 table

用户

id (Primary Key)    
name (Varchar 255)
residential_id (foreign key)
postal_id (foreign key)

地址

id (primary key)
type (enum of R and P)
street (varchar 255)
suburb (varchar 255)

我正在尝试进行内部联接,因此我最终得到的结果集看起来像这样。

id - 名称 - residential_street - residential_suburb, postal_street, postal_suburb

地址详细信息的结果一直为空,我认为这是因为我从地址表中获取了两组数据并且存在冲突。是否可以同时返回与住宅 ID 和邮政 ID 相关联的地址字段?

我的SQL语法是

SELECT * FROM users 
LEFT JOIN address
ON (users.residential_id = address.id AND users.postal_id = address.id)

编辑。正如已经指出的那样,我的数据库设计很差,我正在寻求改进它。我想要实现的关键是我可以存储一个人的详细信息以及他们相关的住宅和邮政地址。我永远不会寻求扩展数据库以包含例如工作地址,因此希望能降低表格的复杂性。

最佳答案

以下假设

  1. 地址中的“id”列是用户表的外键。
  2. address表中有一个addressType列,用来区分邮政和住所

你想要的是:

select 
u.*,
res.street residential_street,
res.suburb residential_suburb,
pos.street postal_street,
pos.suburb postal_suburb
from users u
left join address res on u.id=res.id and res.addressType='R'
left join address pos on u.id=pos.id and pos.addressType='P'

这里的关键是你必须两次加入地址表。需要地址类型鉴别器,以便每个连接只选择适当的地址类型。如果您的架构不同,请澄清,我会修改我的答案。

关于MYSQL 内部加入 2 个 ON 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1753562/

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