如何从左联接返回所有空值?

时间:2019-05-28 22:54:28

标签: mysql sql

我试图将两个表(A和B)连接在一起,并希望返回在表B中在mySQL中标记为空的所有值。

我要连接的两个表都很大,由于DBMS设置,我遇到了一个问题,即我的连接将在6000秒后超时;有没有办法使此查询更有效地运行?

其他信息:即使我将查询限制为10行,它仍然会超时,并给我下面列出的错误代码。

select * 
from Table_A a
left join Table_B b
on a.field_X = b.field_X
where b.Field_X is null;

我遇到以下错误代码:“错误代码2013。在查询过程中失去与MySQL服务器的连接。”

旁注:我是SQL新用户,可能需要询问一些答案。预先谢谢你!

3 个答案:

答案 0 :(得分:0)

首先,您只需要a中的列,因为b列都是null。您可以这样写:

select a.* 
from Table_A a left join
     Table_B b
     on a.field_X = b.field_X
where b.Field_X is null;

然后针对此查询,我建议在table_b(field_x)上建立索引。

答案 1 :(得分:0)

也许这样对您有用:

    select * from table_A a where a.field_X not in (select field_x from table_B);

答案 2 :(得分:0)

尝试另一种方法,如果可以,请减少SELECT字段:

select Table_B.Field_X 
from Table_B b
left join Table_A a
on a.field_X = b.field_X
where a.Field_X is null;

让SQL按其喜欢的方式进行工作:)如果索引正确,则具有标准的左联接(正在查找右侧不匹配的行)会得到高度优化