【发布时间】:2019-07-25 20:58:17
【问题描述】:
我有如下三张表:
First Table Second Table Third Table
Name PIN Id City City_id
David 1948 1 Roma 3
Susan 1245 2 Berlin 2
Jack 1578 3 New York 3
Hans 1247 2
Rose 8745 1
我想根据第三张表合并第一张和第二张表。结果将是:人
Name PIN City
David 1948 New York
Susan 1245 Berlin
Jack 1578 New York
Hans 1247 Berlin
Rose 8745 Roma
首先我可以合并第二个和第三个表,然后将结果表与第一个表合并,但我想在没有中表的情况下解决这个问题。我该如何处理?如何根据第三个表将第一个表的行与第二个表中的指定行顺序组合?
【问题讨论】:
-
除非在第一个和第三个表中都有一个列(或列的组合)来定义顺序,否则您不能这样做。从您所展示的内容来看,似乎没有这样的列。
-
我假设您的第三张表列出了与第一张表中的每个名称相关联的 City_id。除非您有一个外键将第一个表的记录与第三个表的记录相关联,否则这将不起作用。关系型数据库不支持假设记录顺序,所以你需要在第三个表中有另一列与第一个记录的ID。而且您应该在第一个表中添加一个 ID 列,因为您可以轻松拥有多个
David(我怀疑我是您所指的大卫。 -
不用担心顺序你可以简单地认为第三张表按顺序显示第一张表的城市id。我当然可以直接合并第一张和第三张表,然后我可以将结果表与第二张连接起来使用 ids 的表,但我想在不使用中表的情况下解决这个问题。
-
你不明白——SQL中没有“按顺序”的概念。您不能依赖表 1 和表 3 的顺序相同。在 SQL 中,必须有一些东西将记录绑定在一起 - 而不是您认为它们可能出现在表中的顺序。
-
别担心,但请尝试了解关系数据库的工作原理:它们需要唯一的记录标识符。可以这样想:数据库不需要以任何特定顺序存储您的数据,因此它可能会将您的记录
Jack放置在它存储Susan之前的空闲位置。如果您在选择记录时未指定ORDER BY子句,则无法保证它们将按原始顺序显示。 SQL 没有理由支持这一点,因为规则要求您在需要时指定顺序。