【问题标题】:MySQL Beginner Join QueryMySQL初学者加入查询
【发布时间】:2011-08-08 11:45:09
【问题描述】:

Schema:tblCusotmers 存储客户,tblAddresses 存储他们的地址,每个客户有多个地址;

tbl客户 客户编号:1 名称:XYZ 公司

tbl地址 地址ID:1 customer_id: 1

address_id: 2 customer_id: 1

address_id: 3 customer_id: 1

我想在给定地址 ID 的情况下检索属于同一客户的地址的所有地址 ID。所以给定上面的例子,给定地址 ID 3,我想要返回数字 1、2 和 3。

我确定这是一个简单的连接,但我一直在尝试并尝试在我的脑海中解决它并且做不到。有人可以让我感到羞耻吗?

【问题讨论】:

    标签: mysql join


    【解决方案1】:

    JOIN 是工作的工具。一般来说,子查询应该只用来做JOIN不能做的事情。

    这应该是获得所需内容的最佳方式(确保 tblAddresses.customer_id 上有索引):

    SELECT t2.id
    FROM tblAddresses AS t1
    JOIN tblAddresses AS t2 ON t2.customer_id = t1.customer_id
    WHERE t1.address_id = 3
    

    【讨论】:

    • 感谢您的回答,尽管正确的子查询对我来说是新事物,并帮助我完成了项目的下一部分,否则这将意味着另一个问题,所以也谢谢您:D
    【解决方案2】:
    SELECT * 
    FROM tblAddresses 
    WHERE customer_id = (SELECT customer_id FROM tblAddresses WHERE address_id=3)
    

    这使用子查询来获取正确行的 customer_id 并在 where 子句中使用它。 MySQL Docs on subqueries

    使用 JOIN(有点复杂,但正如您特别要求的那样):

    SELECT t1.*
    FROM tblAddresses AS t1
    INNER JOIN (SELECT customer_id FROM tblAddress WHERE address_id=3) AS t2
    ON t1.customer_id = t2.customer_id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-08
      • 2015-11-08
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多