SQL: How do you select only groups that do not contain a certain value?
Say I have a table:
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
How would I be able to group them together and also only select the RESTAURANT_NO that do not have locations in city C?
Using this example, I want to return:
RESTAURANT_NO
-------------
1
4
Since RESTAURANT_NO 2 and 3 both have locations in city C.
I do not know how to group RESTAURANT_NO together while also trying only to select the groups that meet this requirement.
EDIT: I got this working.
However, there is one last thing that I still have not been able to figure out. The following table has the ID number of people along with cities they have worked in:
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
How would I be able to get the PERSON_NO of all the people who have lived in all three cities, A,B, and C?
I want to return
PERSON_NO
---------
3
4
Thanks, again. I haven't had that much experience with SQL and so I'm not sure what to do.
One way:
SELECT RESTAURANT_NO FROM restaurant WHERE RESTAURANT_NO NOT IN
(SELECT RESTAURANT_NO FROM restaurant WHERE RESTAURANT_LOCATION = 'City C')
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'
)
Use DISTINCT
.
try this:
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