【问题标题】:join elements from three unrelated tables连接三个不相关表中的元素
【发布时间】:2016-04-19 21:03:14
【问题描述】:

这里是 SQL 新手。我有以下架构。

我将提供属于 foobar 协会的所有活跃的主要超级收费域的列表。

据我所知,三个表(站点、域和名称)不能连接在一起。如何做到这一点?

【问题讨论】:

  • 您可以“链式”连接/...FROM a INNER JOIN b ON [condition1] INNER JOIN c ON [condition2]
  • 当然可以加入三张或更多桌!
  • 您当然可以将 3 个或更多表连接在一起。你只需要有一些东西来加入它们......从你提供的外观来看,我不确定这可以用你提供的模式来完成,因为表之间的字段似乎不同(除非 id 实际上是用来链接它们的,我猜你可能会错过某种位于它们之间的分组表)
  • 因为您的图表显示了这些表中的每一个的 FK 关系,当然如果您有可以加入的 PK/FK 关系,它们可以按定义连接。为什么你认为你不能?

标签: mysql sql


【解决方案1】:

这是一个连接三个表的例子

SELECT * FROM companies
JOIN sites ON sites.company = companies.id
JOIN domains ON domains.site = sites.id
WHERE 
    sites.is_supercharged = 1 AND sites.is_deleted = 0 AND 
    domains.is_primary = 1 AND domains.is_deleted = 0

它基于架构(希望字段名正确,文本很小)

当您将表加入查询时,您需要在ON 部分中指定匹配字段引用。然后您可以在WHERE 部分中添加任何条件。

【讨论】:

  • 由于命名约定非常糟糕,OP 应该实际编写出 PK/FK 关系的脚本以了解要加入哪些字段。我同意您的选择似乎适用于除域和站点之间的连接之外的所有选项。这是为什么使用 Id 作为 PK 不好的主要例子。连接字段是什么并不明显。但由于图表有关系,我相信它们就在某个地方。编写脚本是确保您加入正确字段的最可靠方法。
  • 但是红色的,它们不是代表其他表的外键吗?我确实希望如果我错了,那么 OP 至少会得到连接表的一般概念。
  • 是的,我认为您可能是对的,但他需要确定而不是猜测。恐怕那些微小的颜色变化对于我的老双焦点眼睛来说太难看到了,除非你指出它们!
  • @HLGEM 我不会说这种情况下的问题是使用了id,但引用字段没有遵循[tablename]_id 约定。
  • @Uueerdo,我建议您阅读有关 SQL 反模式的书,以了解为什么 ID 是 SQL 反模式。 amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/…
猜你喜欢
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 2021-07-23
相关资源
最近更新 更多