2012-02-20 33 views
10

Nói rằng tôi có một bảng:SQL: Làm thế nào để bạn chỉ chọn các nhóm không chứa một giá trị nhất định?

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 

Làm thế nào tôi sẽ có thể nhóm chúng lại với nhau và cũng chỉ chọn RESTAURANT_NO mà không có địa điểm ở thành phố C?

Sử dụng ví dụ này, tôi muốn quay trở lại:

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

Kể từ RESTAURANT_NO 2 và 3 đều có các địa điểm trong thành phố C.

Tôi không biết làm thế nào để nhóm RESTAURANT_NO cùng nhau đồng thời cũng cố gắng chỉ để chọn các nhóm đáp ứng yêu cầu này.

EDIT: Tôi đã làm việc này.

Tuy nhiên, có một điều cuối cùng mà tôi vẫn chưa thể tìm ra. Bảng dưới đây có số ID của người dân cùng với các thành phố họ đã làm việc tại:

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 

Làm thế nào tôi có thể để có được những PERSON_NO của tất cả những người người đã sống ở cả ba thành phố, A, B , và C?

Tôi muốn quay trở lại

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

Cảm ơn, một lần nữa. Tôi đã không có nhiều kinh nghiệm với SQL và vì vậy tôi không chắc chắn phải làm gì.

+0

Vì cái gì cơ sở dữ liệu? –

+0

bạn đang sử dụng cơ sở dữ liệu nào? – Luke101

Trả lời

14

Một cách:

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

Tôi đã thử nghiệm DB của mình với truy vấn này và có vẻ như nó hoạt động. Cảm ơn. – 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

Sử dụng DISTINCT.

thử điều này:

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

Tôi đã cập nhật câu trả lời của mình. Tôi không thấy 'Nhà hàng 2'. Cảm ơn! –

Các vấn đề liên quan