2017-10-28 74 views
0

我在mysql中运行这个查询,并且即使在等待几个小时后它也没有完成。在OR子句中加入2个表

select * 
from merged as rm 
inner join client_Master as E on E.Code = rm.Code 
inner join client_loan_details as d on (d.Loan_Account = rm.loanacno or rm.savingacno = d.SavingAccount) and d.id = E.id 
group by rm.client_name; 

由于表(merged和client_loan_details)中的行数为1000万,所以需要时间。我已经检查过,mysql使用的是正确的索引,这应该不成问题。但我想知道我的问题是否正确。 我正在用d连接表rm,而表E是一个中间表。查询是否按照SQL标准正确或者我错过了什么?

+0

是否需要中间表? –

+1

请包括查询计划 –

+0

@marshalcraft中间表是必要的,以获得客户端的ID。我也尝试使用每个集合的2个查询(Client_Master + Client_details = intermediate,然后合并+ intermediate),这也需要时间。它必须只是因为有大量的行。对? – shantanuo

回答

1

我在OR的连接中表现不佳。尝试从连接中取出它。没有任何汇总的您的GROUP BY陈述正在执行DISTINCT,但仅限于一列,而您将其全部选中。对我来说这似乎没用。

select * 
from merged as rm 
inner join client_Master as E on E.Code = rm.Code 
inner join client_loan_details as d on d.id = E.id 
WHERE (d.Loan_Account = rm.loanacno or rm.savingacno = d.SavingAccount)