如果数据库包含两个表X
和Y
,我的查询应该LEFT JOIN
属性X.a1
和Y.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
)。
答案 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。