2012-06-20 15 views
5

Ho una tabella MySQL denominata accounts. All'interno di questa tabella c'è un campo chiamato salesmanager_id. Il 99% delle volte, il valore in questo campo è sempre lo stesso per tutti gli account di un cliente specifico (specificato con customer_id).Trovare il valore "esotico" in una tabella MySQL

Quello che sto cercando di fare è trovare il customer_id per i clienti che hanno account assegnati a più di un addetto alle vendite. Ad esempio:

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

Nell'esempio precedente, customer_id 14 ha sia salesmanager_id 3 e 4 ad esso assegnata. Vorrei recuperare quello customer_id per la mia lista.

Ho provato la seguente query, ma questo restituisce un risultato vuoto (mentre sono sicuro che ci siano almeno alcune differenze).

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`; 

risposta

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

Questo diventa praticamente tutti i salesmanager_id s di ciascuna customer_id e se c'è più di un unico valore di salesmanager_id, il customer_id viene restituito.

+0

Grazie, era esattamente quello di cui avevo bisogno! – Oldskool

Problemi correlati