Mysql 复杂(my)SQL左连接
是否可能有一个左连接,它将给出如下假设中的结果: 表A:Mysql 复杂(my)SQL左连接,mysql,join,null,left-join,Mysql,Join,Null,Left Join,是否可能有一个左连接,它将给出如下假设中的结果: 表A: id value 1 foo 2 bar 3 foobar 表B: foreign foreign_value 1 fish 1 soup 联接的结果应为表A(左联接)的每个结果,此外,联接的结果在A和B之间: 从A.id=B.foreign上的复杂联接B中选择*: id value foreign foreign_value 1 foo NULL
id value
1 foo
2 bar
3 foobar
表B:
foreign foreign_value
1 fish
1 soup
联接的结果应为表A(左联接)的每个结果,此外,联接的结果在A和B之间:
从A.id=B.foreign上的复杂联接B中选择*:
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
执行正常的左联接时,所示示例结果集的第一行将不存在
这样的选择是可能的吗?不,这样的连接是不可能的,因为您将无法获得第一行 你可以使用像这样的工会
SELECT a.id, a.value, b.foreign, b.foreign_value
FROM A inner join B ON A.id=B.foreign
UNION
SELECT a.id, a.value, null, null
FROM A
这将在您的示例中给出预期的结果,但我不明白您为什么尝试这样做。因此,我不知道在一般情况下,这是否给出了预期的结果 你的意思是
外部连接
。我不确定你想达到什么目的。这根本不是联接,因为它包含来自其他地方的不存在的值。(例如,在id=1的情况下,外部/值为null)。了解更多信息会有所帮助。整个故事可能是关于一个糟糕的数据库/表设计,这是由于添加了一个额外的功能。在CMS中,我们显示分配给某个页面的“新闻”记录(简单的int字段“pid”)。新功能允许在多个页面上显示新闻。为此,我添加了一个包含新闻页面关系的M-M表。现在我必须合并旧的“pid”用新的MM查询键入query,整个问题就归结为这个问题。如果我想计算一个页面上的新闻数量,我必须计算那些真正驻留在页面上的新闻+另外,那些从MM表中引用的新闻我通过执行两个单独的查询从PHP中解决了这个问题。我只是好奇,是否可以从一个查询中找到它——对于这个查询,必须存在一个类似于上面示例的连接。不过还是谢谢你。