MySQL问题:空表上的LEFT JOIN

时间:2010-03-03 17:00:16

标签: 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)

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

3 个答案:

答案 0 :(得分: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'

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

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

答案 1 :(得分:5)

你的表名有点令人困惑。是X和Y,还是X.a和Y.b?

如果X和Y:

SELECT X.a1, X.a2, Y.a1, Y.b2 FROM X LEFT OUTER JOIN Y ON (X.a1 = Y.b1)

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

答案 2 :(得分:0)

在某些返回错误的Sql编辑器上尝试查询 HeidiSQL或类似的。在我的情况下,问题是WHERE子句中的模糊id。