SQL: Как выбрать только те группы, которые не содержат определенного значения? - PullRequest
23 голосов
/ 20 февраля 2012

Скажем, у меня есть таблица:

Restaurant locations: 

RESTAURANT_NO | RESTAURANT_LOCATION
-----------------------------------
1             |            City A
1             |            City B
2             |            City A
2             |            City B
2             |            City C
3             |            City C
4             |            City A
4             |            City B

Как бы я мог сгруппировать их вместе, а также выбрать только RESTAURANT_NO, которые не имеют местоположений в городе C?

Используя этоНапример, я хочу вернуть:

 RESTAURANT_NO
 -------------
 1
 4

Поскольку RESTAURANT_NO 2 и 3 имеют местоположения в городе C.

Я не знаю, как сгруппировать RESTAURANT_NO вместе, пытаясь также только выбратьгруппы, которые отвечают этому требованию.

РЕДАКТИРОВАТЬ: Я получил это работает.

Однако есть еще одна вещь, которую я до сих пор не смог выяснить.В следующей таблице указаны идентификационные номера людей и городов, в которых они работали:

PERSON_NO | CITY_NAME
---------------------
1         |    City A
2         |    City B
3         |    City A
3         |    City B
3         |    City C
4         |    City A
4         |    City B
4         |    City C

Как бы я мог получить ЛИЦО_NO всех людей, которые жили во всех трех городах, A, Bи C?

Я хочу вернуть

PERSON_NO
---------
3
4

Спасибо, еще раз.У меня не было такого большого опыта работы с SQL, и я не уверен, что делать.

Ответы [ 3 ]

28 голосов
/ 20 февраля 2012

В одну сторону:

SELECT RESTAURANT_NO FROM restaurant WHERE RESTAURANT_NO NOT IN
(SELECT RESTAURANT_NO FROM restaurant WHERE RESTAURANT_LOCATION = 'City C')
5 голосов
/ 20 февраля 2012
SELECT DISTINCT
      Restaurant_no
FROM 
      TableX t
WHERE 
      NOT EXISTS
      ( SELECT *
        FROM TableX c
        WHERE c.Restaurant_no = t.Restaurant_no
          AND c.Restaurant_location = 'City C'
      )
3 голосов
/ 20 февраля 2012

Используйте DISTINCT.

попробуйте это:

SELECT DISTINCT t.Restaurant_No
FROM Restaurant t
WHERE t.Restaurant_No NOT IN
       (SELECT s.Restaurant_No  
        FROM  Restaurant s
        WHERE s.RESTAURANT_LOCATION = 'City C')
ORDER BY t.Restaurant_No
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...