Mysql 复杂(my)SQL左连接

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

是否可能有一个左连接,它将给出如下假设中的结果:

表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      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中解决了这个问题。我只是好奇,是否可以从一个查询中找到它——对于这个查询,必须存在一个类似于上面示例的连接。不过还是谢谢你。