MySQL问题:空表上的LEFT JOIN

ash*_*ays 6 mysql left-join

给定一个数据库有两个表XY,我有一个查询,应LEFT JOIN在属性的两个表X.a1Y.b1.我使用了以下查询:

SELECT X.a1, X.a2, Y.b1, Y.b2 FROM X LEFT JOIN Y ON (X.a1 = Y.b1)
Run Code Online (Sandbox Code Playgroud)

我认为即使Y目前是一张空桌,这也足够好了.但是,查询中断,因为表Y似乎是空的.有没有办法重新格式化这个查询,以便即使Y是一个空表,LEFT JOIN不会破坏?或者我只需要始终确保表中有一些数据Y,即使它与表中的任何内容都不匹配X(因此LEFT JOIN).

小智 8

由于您没有发布您的实际SQL,我只是在这里做出假设.我的经验告诉我你可能有一个where子句导致SQL返回空集.

SELECT X.a1, X.a2, Y.b1, Y.b2 FROM X LEFT JOIN Y ON (X.a1 = Y.b1)
WHERE Y.b3 = 'something'
Run Code Online (Sandbox Code Playgroud)

上面的SQL将返回空结果集.您可能需要修改SQL成以下格式,通过调出有问题的where子句LEFT JOIN ON子句.

SELECT X.a1, X.a2, Y.b1, Y.b2 FROM X 
LEFT JOIN Y ON (X.a1 = Y.b1 and Y.b3 = 'something')
Run Code Online (Sandbox Code Playgroud)


aw *_*rud 5

你的表名有点令人困惑.是X和Y,还是Xa和Yb?

如果是X和Y:

SELECT X.a1, X.a2, Y.a1, Y.b2 FROM X LEFT OUTER JOIN Y ON (X.a1 = Y.b1)
Run Code Online (Sandbox Code Playgroud)

应该带回所有X,Y.a1和Y.b2的空值,其中没有匹配的记录.