【问题标题】:How to access data from foreign key table如何访问外键表中的数据
【发布时间】:2014-12-30 09:34:25
【问题描述】:

我有三个表 Company, User , Address 。

company 有三个字段

  • comp_id(PK)
  • comp_name
  • user_id(FK)
  • to_address_id(FK)
  • from_address_id(FK)

    地址有字段:

  • address_id(PK)
  • 城市
  • 状态

    用户有字段 user_id(PK),用户名

    to_address_id 和 from_address_id 都是外键,引用同一个表地址并映射到 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;

【问题讨论】:

    标签: mysql sql database select join


    【解决方案1】:

    解决方案 - 您需要 JOIN 两次,每次针对您感兴趣的每个 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;
    

    【讨论】:

      【解决方案2】:

      尝试以下方法:

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

      【讨论】:

        【解决方案3】:

        你要先看看JOIN在查询中的使用。

        试试这个:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-01-31
          • 2021-09-16
          • 1970-01-01
          • 2021-07-10
          • 2011-07-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多