0

I want to get values missing in the in clause of a query

people

ID    |  Name | location_id | 
1     |    Rex|          5  |
2     |    Tex|          7  |
3     |    Jim|          8  |
4     |   John|          11 |
5     |    Tom|          12 |

Place

location_id | Place    |
5           | New York |
6           | London   |
7           | Madrid   |
8           | Paris    |   
9           | Dublin   |   
10          | Chicago  |   
11          | Berlin   |   
12          | Colombo  |   

i want to find places where there are no people , when i give a list of locations in the in clause of the Query

i don't want to find all the locations which are not in the people table, only those ,in which i provide in the in clause

Query

SELECT location_id FROM people WHERE location_id in (5,6,7,8,9);

OUTPUT expected

|Location_id|
           6|
           9|
Naveen Kumar
  • 4,543
  • 1
  • 18
  • 36

5 Answers5

1

Using a JOIN instead of two IN operations (improved performance).

Try this:

SELECT pl.location_id
FROM place pl LEFT JOIN
     people pp ON pl.location_id=pp.location_id
WHERE pp.location_id IS NULL 
      AND pl.location_id IN (5,6,7,8,9);

Result:

LOCATION_ID
6
9

See result in SQL Fiddle.

EDIT:

Without using JOIN:

SELECT location_id
FROM place
WHERE location_id NOT IN 
          (SELECT location_id FROM people)
AND pl.location_id IN (5,6,7,8,9);
Raging Bull
  • 18,593
  • 13
  • 50
  • 55
0
SELECT location_id FROM place WHERE location_id NOT IN (SELECT location_id  FROM people) AND location_id IN (5,6,7,8,9);
Ilesh Patel
  • 2,053
  • 16
  • 27
0

Try Below Query

    select place from place 
          inner join poeple on place.location_id <> people.location_id where AND 
    place.location_id IN (5,6,7,8,9);

Inner join is use to join two or more table .

Gopal Joshi
  • 2,350
  • 22
  • 49
0
select p.location_id FROM people p join Place l on 
p.location_id!=l.location_id WHERE p.location_id in (5,6,7,8,9);
Surendheran
  • 187
  • 1
  • 18
0

select l.location_id from people p left join place l on p.location_id=l.location_id where p.location_id not in (5,6,7,8,9)

mehere
  • 1,487
  • 5
  • 28
  • 50