0
だから私は同じメールアドレス、パスワード、その他の情報(ええ、悪い実装、質問しないでください)で私のウェブサイトで行われたユーザーアカウントを返すクエリがあります。これは、別のプログラムからユーザーIDを取得することによって行われます。COUNT UNIONが多すぎます
私のSQLは、あなたが、私はこれらの重複したユーザーアカウントのそれぞれが持っているどのように多くの罰則カウントしようと列を持っていることに気づくでしょう
SELECT *
FROM
(SELECT usuario.id as 'user_id',
concat(usuario.nombre, ' ', usuario.apellidos) AS 'user_full_name',
usuario.email 'user_email',
LEFT(usuario.date_created, 19) AS 'user_date_created',
LEFT(usuario.last_updated, 19) AS 'user_last_updated',
CASE
WHEN usuario.status = 10 THEN 'Banned'
ELSE 'Active'
END AS 'status',
'Mismos datos' AS duplicate_type,
CASE
WHEN usuario.es_broker=0 THEN 'Consumer'
WHEN usuario.es_tm=1 THEN 'TM'
ELSE 'Broker'
END AS 'user_type',
COUNT(DISTINCT penalizacion.id) AS 'penalty_count'
FROM usuario
JOIN penalizacion ON usuario.id = penalizacion.vendedor_id
WHERE usuario.password =
(SELECT usuario.password
FROM usuario
WHERE usuario.id = {USUARIO_DUPE})
UNION SELECT usuario.id as 'user_id',
concat(usuario.nombre, ' ', usuario.apellidos),
usuario.email,
LEFT(usuario.date_created, 19),
LEFT(usuario.last_updated, 19),
CASE
WHEN usuario.status = 10 THEN 'Dado de baja'
ELSE 'Activo'
END AS 'status',
'Mismo móvil' AS duplicate_type,
CASE
WHEN usuario.es_broker=0 THEN 'Consumer'
WHEN usuario.es_tm=1 THEN 'TM'
ELSE 'Broker'
END AS 'user_type',
COUNT(DISTINCT penalizacion.id) AS 'penalty_count'
FROM usuario
JOIN penalizacion ON usuario.id = penalizacion.vendedor_id
WHERE usuario.numero_movil =
(SELECT usuario.numero_movil
FROM usuario
WHERE usuario.id = {USUARIO_DUPE})
UNION SELECT usuario.id as 'user_id',
concat(usuario.nombre, ' ', usuario.apellidos),
usuario.email,
LEFT(usuario.date_created, 19),
LEFT(usuario.last_updated, 19),
CASE
WHEN usuario.status = 10 THEN 'Dado de baja'
ELSE 'Activo'
END AS 'status',
'Mismo email' AS duplicate_type,
CASE
WHEN usuario.es_broker=0 THEN 'Consumer'
WHEN usuario.es_tm=1 THEN 'TM'
ELSE 'Broker'
END AS 'user_type',
COUNT(DISTINCT penalizacion.id) AS 'penalty_count'
FROM usuario
JOIN penalizacion ON usuario.id = penalizacion.vendedor_id
WHERE usuario.email =
(SELECT usuario.email
FROM usuario
WHERE usuario.id = {USUARIO_DUPE})
UNION SELECT usuario.id,
concat(usuario.nombre, ' ', usuario.apellidos),
usuario.email,
LEFT(usuario.date_created, 19),
LEFT(usuario.last_updated, 19),
CASE
WHEN usuario.status = 10 THEN 'Dado de baja'
ELSE 'Activo'
END AS 'status',
'Misma tarjeta principal' AS duplicate_type,
CASE
WHEN usuario.es_broker=0 THEN 'Consumer'
WHEN usuario.es_tm=1 THEN 'TM'
ELSE 'Broker'
END AS 'user_type',
COUNT(DISTINCT penalizacion.id) AS 'penalty_count'
FROM usuario
JOIN penalizacion ON usuario.id = penalizacion.vendedor_id
WHERE usuario.main_credit_card_id =
(SELECT usuario.main_credit_card_id
FROM usuario
WHERE usuario.id = {USUARIO_DUPE})
ORDER BY status DESC) A
GROUP BY user_id
です。しかし、その代わりに、 "penalty_count"の列は、私が探している重複のユーザーのIDと実際の重複のペナルティの数のペナルティの数を合計するようです。
ので、代わりの取得は、私はすべてのコメントにこの
あまりにも大きな問題です。それを最小化! – jarlh
jarlhと同意します。あなたのSQLクエリはあなたの問題が他の誰かによって解決されるには大きすぎます。最小の問題を最小限に抑えるようにしてください(同じユーザーのメールの件数を取得しようとしています) – DeadEye
UNIONクエリ内のGROUP BY句はどこにありますか? 1つを引き出し、それを自分の上で実行して、それが何をしているのかを確認します。見た目では、それぞれの個別の値ではなく、各行ごとに効果的に1を入れることができます。しかし、あなたのデータを見ることなく教えるのは難しいです。 –