【发布时间】:2014-11-05 03:06:25
【问题描述】:
是否有可能有一个左连接,它会给出如下假设中的结果:
表 A:
id value
1 foo
2 bar
3 foobar
表 B:
foreign foreign_value
1 fish
1 soup
连接的结果应该是表 A 的每个结果(左连接)以及 A 和 B 之间的连接结果:
SELECT * FROM A complex join B ON A.id=B.foreign:
id value foreign foreign_value
1 foo NULL NULL
1 foo 1 fish
1 foo 1 soup
2 bar NULL NULL
3 foobar NULL NULL
当执行一个普通的 LEFT JOIN 时,显示的示例结果集的第一行将不存在。
这样的选择可能吗?
【问题讨论】:
-
你的意思是
outer join。 -
我不确定你想要达到什么目的。这根本不是一个连接,因为它包含来自其他地方的不存在的值。 (例如,在 id=1 的情况下,外国/值的 null-null)。了解更多信息会有所帮助。
-
整个故事可能是由于添加了附加功能而导致的糟糕的数据库/表设计。在 CMS 中,我们显示分配给某个页面的“新闻”记录(简单的 int 字段“pid”)。新功能允许新闻显示在多个页面上。为此,我添加了一个包含新闻页面关系的 M-M 表。现在我必须将旧的“pid”类型查询与新的 MM 查询结合起来,整个事情都归结为这个问题。
-
如果我想计算一个页面上的新闻数量,我将不得不计算那些真正驻留在页面上的新闻 + 以及那些从 MM 表中引用的新闻
-
我通过执行两个单独的查询从 PHP 中解决了这个问题。我只是好奇是否有可能在单个查询中 - 类似于上述示例的连接必须存在。不过还是谢谢。