2012-06-20 6 views
5

Tengo una tabla MySQL llamada accounts. Dentro de esta tabla hay un campo llamado salesmanager_id. El 99% del tiempo, el valor en este campo es siempre el mismo para todas las cuentas de un cliente específico (especificado con customer_id).Encontrar el valor "exótico" en una tabla MySQL

Lo que estoy tratando de hacer es encontrar el customer_id para los clientes que tienen cuentas asignadas a más de un gerente de ventas. Por ejemplo:

+------------------------------------+ 
| id | customer_id | salesmanager_id | 
|------------------------------------| 
| 1 | 12   | 4    | 
| 2 | 12   | 4    | 
| 3 | 14   | 3    | <-- I want this customer_id 
| 4 | 14   | 4    | 
+------------------------------------+ 

En el ejemplo anterior, customer_id 14 tiene tanto salesmanager_id 3 y 4 asignado a él. Me gustaría recuperar ese customer_id para mi lista.

He intentado la siguiente consulta, pero eso arroja un resultado vacío (aunque estoy seguro de que hay al menos algunas diferencias).

SELECT `name`, `customer_id` AS `customer`, `salesmanager_id` FROM `accounts` 
WHERE `salesmanager_id` NOT IN (
    SELECT `salesmanager_id` FROM `accounts` a 
    LEFT JOIN `customers` c ON (a.customer_id = c.id) 
    WHERE a.customer_id=c.id 
) GROUP BY `customer`; 

Respuesta

13
SELECT 
    customer_id 
FROM 
    accounts 
GROUP BY 
    customer_id 
HAVING 
    COUNT(DISTINCT salesmanager_id) > 1 

Esto básicamente obtiene todos los salesmanager_id s de cada customer_id y si hay más de un único valor salesmanager_id, la customer_id se devuelve.

+0

¡Gracias, eso era exactamente lo que necesitaba! – Oldskool

Cuestiones relacionadas