2017-07-06 9 views
0

私は顧客に関するいくつかのデータを取得するクエリを持っています。この顧客は3つの電話番号を持つことができ、これらは繰り返すことができます。これらの携帯電話は、パートナーを繰り返す回数をカウントするMYSQLのカウント回数の値は3列にあります

は、副選択を作成している:このクエリは、50のにかかる

SELECT a.*,c.*,b.*, 
    (
     select count(*) 
     from TABLE_A as k 
     where (k.phone=a.phone or k.phone2=a.phone or k.phone3=a.phone) 
     and k.id!=a.id 
    ) as repetitionsPhone1 
    FROM a 
    left join c on a.id=c.id 
    left join b on a.id=b.id 

(select count(*) 
from TABLE_A as k 
where (k.phone=a.phone or k.phone2=a.phone or k.phone3=a.phone) 
and k.id!=a.id) as repetitionsPhone1 

これは大きな内部にあり、このように選択します行は約30秒で、毎日約2000行が返されます。

SELECT phn,sum(count) as phoneRepetitions 
from (
    select k.phone1 as phn, count(*) as count 
    from k 
    group by k.phone1 
     UNION 
    select k.phone2 as phn,count(*) as count 
    from k 
    group by k.phone2 
     UNION 
    select k.phone3 as phn,count(*) as count 
    from k 
    group by k.phone3 
) as aux 
    group by phn 

そして、これは私が解決したいすべての#1062 MYSQL error: Duplicate entry for key 'distinct key'

ファーストを返します:私はexplainを使用して、私は私が検索し、私はこれを試してみましたので、このサブクエリが問題だったことがわかり、これを最適化する

この問題。誰が何が起こっているのか知っていますか?このエラーは、挿入ステートメントのロジックのようですが、select?

これは、最適化する必要がある大きな選択肢を改善するのに役立ちますか?私は3つの列についてこれを行わなければなりません。

ありがとうございます。

+0

ユニオンはより効率的になりません – Dimgold

+0

@Dimgoldあなたの答えをありがとう。あなたは解決策を知っていますか? – Maik

+0

同じエイリアスを使用してテーブルを結合することはできませんか? E.G各組合に別個のエイリアスが必要でしょうか?等 はkでALTAS_DET k2を 群からカウント として(*)カウント、PHNとしてk.phone2選択 k.phone1 UNIONによってALTAS_DETのK1からカウント としてグループをカウント(*)、PHNとしてk.phone1選択しますk.phone3によって.phone2 UNIONがALTAS_DET k3を グループからのカウント として(*)、PHNとしてk.phone3 SELECT COUNT –

答えて

0
SELECT 
COUNT(*) AS CountOf FROM 
    table1 
    INNER JOIN 
table2 
GROUP BY phone1 , phone2 , phone3 
HAVING COUNT(*) > 1 
関連する問題