Выбор оператора GROUP BY только в том случае, если предикат имеет значение true для всех сгруппированных полей - PullRequest
1 голос
/ 02 сентября 2011

У меня есть такая таблица:

-------------
| id  |  A  |
-------------
|  1  |  2  |
|  1  |  5  |
|  1  |  6  |
|  2  |  6  |
|  2  |  9  |
-------------

Как я могу выбрать все идентификаторы со значениями A, которые не содержат определенных чисел, например, я не хочу, чтобы любой идентификатор имел A IN (9, -1,20), например?

Спасибо!

1 Ответ

2 голосов
/ 02 сентября 2011

Предположим, вы хотите только ID 1, потому что для ID 2 есть значение A, которое является IN (9, -1,20), это то, что вы хотите:

SELECT t1.id, t1.A
  FROM my_table t1
  LEFT JOIN my_table t2
    ON t2.id = t1.id
   AND t2.A IN (9, -1, 20)
 WHERE t2.id IS NULL

или

SELECT id
  FROM my_table t1
 WHERE NOT EXIST (
       SELECT NULL
         FROM my_table t2
        WHERE t2.id = t1.id
          AND t2.A IN (9, -1, 20)
       )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...