mysql - 如何从外键表访问数据

标签 mysql sql database select join

我有三个表 Company、User 和 Address。

公司有三个字段

  • comp_id(PK)
  • 公司名称
  • user_id(FK)
  • to_address_id(FK)
  • from_address_id(FK)

    地址有字段:

  • address_id(PK)
  • 城市
  • 状态

    用户有字段 user_id(PK),user_name

    to_address_id 和 from_address_id 都是外键,引用同一个表Address,映射到address_id

    现在的重点是如何从表中检索 from_address,我能够从此查询中检索 to_address。

    在这里,我可以从 Shipment 表中获取 to_address_id 和 from_address_id,但是如何根据 address_id 在同一查询中获取这两个地址:

 SELECT s.comp_name,u.user_name,a.city
            FROM
        company s
    JOIN
        User u
    JOIN
        Address a
    ON
        s.user_id = u.user_id 
        AND s.to_address_id = a.address_id
    WHERE
        s.user_id = 1001;

最佳答案

解决方案 - 您需要加入两次,每次针对您感兴趣的每个 FK:

SELECT s.comp_name, u.user_name, a_from.city AS city_from, a_to.city AS city_to
FROM company s
LEFT JOIN User u ON s.user_id = u.user_id 
LEFT JOIN Address a_from ON s.from_address_id = a_from.address_id
LEFT JOIN Address a_to ON s.to_address_id = a_to.address_id
WHERE s.user_id = 1001;

关于mysql - 如何从外键表访问数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27702863/

相关文章:

mysql - 忽略查询中的重复记录

mysql - ORDER BY 格式错误的日期列

php - 无法显示图像,因为它包含错误

请提供 sql 帮助 - 获取客户的最新事件

sql - SQL:选择表中存在复合键的选择查询中存在的所有记录

database - 大数据去了哪里以及如何存储?

database - 服务器因流量高峰而崩溃,现在出现数据库连接错误

数据库交互代码

MYSQL 查询获取每种类型的前 2 个重复项

php - 使用 PHP、ajax、jQuery 在 Mysql 中动态创建表