2017-10-28 73 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)