2013-08-07 2 views
0

У меня есть таблица вроде этого:Как получить неподходящие записи из уникальных ключей?

Physician_key Product Month Score 
    1 a  8  1 
    1 a  8  2 
    1 a  8  3 
    2 b  8  2 
    2 b  8  1 

Я пытаюсь получить только количество ключей, имеющих балл < = 2, и я не хочу считать ключ, даже если это происходит, чтобы один раз счет> 2 , Таким образом, на выходе я хочу что-то вроде этого: Count = 2, для продукта b в месяце 8.

Я пытаюсь сделать самостоятельное соединение с ограничением Null на ключ для записей < = 2 и> 2. Но он все еще возвращает мне первые 2 строки, чего я не хочу.

+0

Таблица на самом деле не является таблицей РСУБД, если она не имеет ПК. 'score' * кажется * неподходящим компонентом соединения PK – Strawberry

+0

Его основным ключом является некоторый sales_id, один sales_id может иметь несколько physician_keys –

+0

Пример вашего текущего SQL был бы полезен. – Jim

ответ

0

NOT EXISTS пункт может помочь:

SELECT * FROM table t 
WHERE NOT EXISTS (
       SELECT 1 
       FROM table tx 
       WHERE tx.Physician_key = t.Physician_key 
         AND tx.Product = t.Product 
         AND Score > 2 
       ); 

В основном это говорит: «Дайте мне все строки в таблице, но исключает любые строки, в которых существует ряд для этого врача и продукта со счетом> 2»

+0

который является таблицей tx? и почему мы выбираем только 1? ключ врача может иметь n количество значений –

+0

Они оба являются таблицей в вашем вопросе. Таким образом, мы захватываем все записи для этой таблицы, в которых нет записи в той же таблице со Score> 2. – Jim

+0

Я пробовал с NOT EXISTS (выберите physician_key из таблицы, где оценка> 2) возвращает мне нулевые строки –