在mysql中选择列而不使用子查询
我想从表“A”中选择一些记录,但不在表“B”中的记录 例如。。。 桌子是在mysql中选择列而不使用子查询,mysql,subquery,Mysql,Subquery,我想从表“A”中选择一些记录,但不在表“B”中的记录 例如。。。 桌子是 A{A_ID, A_Date, A_Price}; B{B_ID, A_ID}; 我想从表“A”中选择具有主键A\u ID的记录,但仅选择那些在连接主键A\u ID上的两个表时不是表“B”的记录。 我可以用查询来做这件事 select * from A where A_ID not in (select A_ID from B) 但我的问题是子查询。因为运行时间太长,如果数据量大 所以我想不使用子查询运行它。 请帮忙
A{A_ID, A_Date, A_Price};
B{B_ID, A_ID};
我想从表“A”中选择具有主键A\u ID的记录,但仅选择那些在连接主键A\u ID上的两个表时不是表“B”的记录。
我可以用查询来做这件事
select * from A where A_ID not in (select A_ID from B)
但我的问题是子查询。因为运行时间太长,如果数据量大
所以我想不使用子查询运行它。
请帮忙 尝试以下查询:
select * from TableA A
where not exists(select 1 from TableB where A_ID = A.A_ID)
或
如果数据量大,请张贴示例两个查询都需要太多时间。第一个查询包含子查询,解决方案必须没有子查询,因为它需要更多的时间来运行这些表上有索引吗?如果不是,这就是方法。是的,但不是在A_ID和B_ID上。你也应该在这些列上创建索引。那么我的查询应该可以很好地工作(而且
不存在
比不存在
更可取)。@narhari如果答案有帮助,你应该接受,如果你愿意,你可以选择向上投票:)
select A.* from TableA A left join TableB B
on A.A_ID = B.A_ID
where B.B_ID is null