私は顧客に関するいくつかのデータを取得するクエリを持っています。この顧客は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つの列についてこれを行わなければなりません。
ありがとうございます。
ユニオンはより効率的になりません – Dimgold
@Dimgoldあなたの答えをありがとう。あなたは解決策を知っていますか? – Maik
同じエイリアスを使用してテーブルを結合することはできませんか? 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 –