2012-06-20 25 views
5

accounts adlı bir MySQL tablom var. Bu tabloda salesmanager_id adlı bir alan var. Zamanın% 99'u, bu alandaki değer her zaman belirli bir müşterinin tüm hesapları için aynıdır (customer_id ile belirtilir).Bir MySQL tablosunda "egzotik" değeri bulma

Yapmaya çalıştığım şey, birden fazla satıcıya atanan hesapları olan müşteriler için customer_id bulmaktır. Örneğin: Yukarıdaki örnekte

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

, customer_id 14 atanmış hem salesmanager_id 3 ve 4 bulunur. Listem için bu customer_id'u almak istiyorum.

Aşağıdaki sorguyu denedim, ancak bu boş bir sonuç döndürüyor (en azından bazı farklılıklar olduğundan eminim).

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

cevap

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

Bu temelde her customer_id ait salesmanager_id s her alır ve birden fazla benzersiz salesmanager_id değer yoksa , customer_id döndürülür.

+0

Teşekkürler, tam ihtiyacım olan buydu! – Oldskool

İlgili konular