【问题标题】:Confused about using UNION or JOIN对使用 UNION 或 JOIN 感到困惑
【发布时间】:2013-10-02 20:07:08
【问题描述】:

我有三个 MySQL 表:'people'、'people2id'、'places'。第一个存储有关人员的信息,其中“地点”表存储有关其地址的信息。中间的“people2id”将这两个表相互连接(可能是一个人有两个或多个地址)。

现在我想转到某个人的个人资料并查看他的个人资料,以及他的关联地址。我为此创建了这个查询:

 SELECT * FROM people p
 JOIN people2id e ON p.peopleId = e.peopleId
 JOIN places a ON a.peopleId = e.peopleId
 WHERE p.peopleId = number

当这个人有关联的地址时,这有效,否则,它将失败。我不明白我是否应该使用任何类型的 JOIN 或 UNION 来解决这个问题。

【问题讨论】:

  • 是否有任何具体原因要创建额外的表people2id 只是为了关联您可以直接将人们与每个地方应该有 people_id 的地方关联起来

标签: mysql sql database-design join union


【解决方案1】:

JOIN改为LEFT JOIN,即

 SELECT * FROM people p
 LEFT JOIN people2id e ON p.peopleId = e.peopleId
 LEFT JOIN places a ON a.peopleId = e.peopleId
 WHERE p.peopleId = number

使用LEFT JOIN 将包括来自people 的所有记录,无论它们是否包含相关记录。

【讨论】:

  • 谢谢,我现在了解 LEFT JOIN。
【解决方案2】:

UNION 用于从两个不同的查询中获取相同类型的信息并将它们作为单个结果集返回

JOIN 用于将列和数据添加到行(不是那么简单,但你可以这样看)

【讨论】:

    【解决方案3】:

    您应该使用LEFT JOIN

    SELECT * FROM people p
    JOIN people2id e ON p.peopleId = e.peopleId
    LEFT JOIN places a ON a.peopleId = e.peopleId
    WHERE p.peopleId = number
    

    【讨论】:

    • 请您删除 w3schools 链接吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2023-02-05
    • 2019-09-13
    • 2012-07-22
    相关资源
    最近更新 更多