【问题标题】:Is this a MySQL JOIN? [duplicate]这是一个 MySQL JOIN 吗? [复制]
【发布时间】:2013-11-05 08:08:02
【问题描述】:
SELECT
     dim_date.date, dim_locations.city, fact_numbers.metric
FROM
     dim_date, fact_numbers
WHERE
     dim_date.id = fact_numbers.fk_dim_date_id
AND
     dim_locations.city = "Toronto"
AND
     dim_date.date = 2010-04-13;

由于我没有使用JOIN 命令,我想知道这是否确实是JOIN(如果不是,该怎么称呼它)?

这是一个维度模型,通过使用代理键和主键来匹配细节

【问题讨论】:

标签: mysql sql join rdbms star-schema


【解决方案1】:

是的,它将表格连接在一起,因此它将提供所有表格的相关信息。

通过WHERE 而不是JOIN 链接表的一个主要缺点是无法使用LEFTRIGHTFull 来显示一个表中的记录,即使在另一个表中丢失。

但是,您的 SQL 语句无效。您没有将 dim_locations 链接到其他任何一个表,并且在 FROM 子句中缺少它。

您使用与您的WHERE 子句相当的INNER JOIN 的查询可能类似于以下内容:

SELECT DD.date, DL.city, FN.metric
FROM dim_date AS DD
  JOIN fact_numbers AS FN ON DD.id = FN.fk_dim_date_id
  JOIN dim_locations AS DL ON DL.id = FN.fk_dim_locations_id
WHERE DL.city = 'Toronto'
AND DD.date = 2010-04-13

【讨论】:

    【解决方案2】:

    是的,它正在加入表格。当未显式使用连接子句时,称为非 ANSI JOIN 语法。而当使用join子句时,就是ANSI JOIN

    【讨论】:

    • 只是好奇,“ANSI”这个词是怎么发音的?人们是把它读作我加入的 A N S 还是“an-c”?
    • 我发音的第二个。而且我的母语不是英语。
    【解决方案3】:

    如果您在 where 子句中引用两个不同的表并比较它们的引用 ID,那么是的,它的作用与 JOIN 相同。

    但是请注意,如果优化器没有正确优化它,这可能会非常低效,请参阅:Is there something wrong with joins that don't use the JOIN keyword in SQL or MySQL?INNER JOIN keywords | with and without using them

    【讨论】:

      猜你喜欢
      • 2018-01-16
      • 2011-11-21
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多