我试图将两个表(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新用户,可能需要询问一些答案。预先谢谢你!
答案 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按其喜欢的方式进行工作:)如果索引正确,则具有标准的左联接(正在查找右侧不匹配的行)会得到高度优化