2012-02-20 9 views
10

Say Mam tabeli:SQL: Jak wybrać tylko te grupy, które nie zawierają określonej wartości?

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 

Jak będę mógł grupować je razem, a także wybrać tylko RESTAURANT_NO, które nie mają miejsca w mieście C?

Stosując ten przykład, chcę wrócić:

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

Od RESTAURANT_NO 2 i 3 mają zarówno lokalizacje w mieście C.

nie wiem jak grupa RESTAURANT_NO razem jednocześnie starając się jedynie do wybierz grupy, które spełniają to wymaganie.

EDYCJA: Mam to działa.

Jest jednak ostatnia rzecz, której wciąż nie mogłem wymyślić. Poniższa tabela zawiera numer identyfikacyjny osoby wraz z miastami pracowali w:

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 

Jak będę w stanie uzyskać PERSON_NO wszystkich ludzi którzy żyli we wszystkich trzech miastach, A, B , i C?

chcę wrócić

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

Dzięki, jeszcze raz. Nie miałem tak dużego doświadczenia z SQL, więc nie jestem pewien, co robić.

+0

Na jakiej bazy danych? –

+0

jakiej bazy danych używasz? – Luke101

Odpowiedz

14

Jednym ze sposobów:

SELECT RESTAURANT_NO FROM restaurant WHERE RESTAURANT_NO NOT IN 
(SELECT RESTAURANT_NO FROM restaurant WHERE RESTAURANT_LOCATION = 'City C') 
+0

Przetestowałem mój DB z tym zapytaniem i wygląda na to, że działa. Dzięki. – vesselll

4
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

Zastosowanie DISTINCT.

spróbuj tego:

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 
+0

Zaktualizowałem moją odpowiedź. Nie widziałem "Restauracji 2". Dzięki! –

Powiązane problemy