0
所以...我有一個查詢,返回在我的網站上使用相同的電子郵件地址,密碼和其他信息(是的,不好的實現,不要問)在我的網站上做出的用戶帳戶。它通過從另一個程序提供用戶標識來實現。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,而不是每個不同的值。儘管沒有看到你的數據,但很難說。 –