I have two tables:
Table PL:
plid | plname |
---|---|
1 | Alice |
2 | John |
3 | Danielle |
And table PLproducts
plid | productIdentifier |
---|---|
1 | membership |
1 | life |
1 | dental |
2 | membership |
3 | membership |
3 | life |
3 | auto |
I need to find those plid where productIdentifier does not contain "dental"
Expected results:
plid | plname |
---|---|
2 | John |
3 | Danielle |
If I Outer Join for PLproducts <> 'dental', I get all the records that do not contain 'dental' but that is not what Im looking for.
I've never found this scenario before. I understand it may be a simple question.
Thank you all.
CodePudding user response:
You're looking for where something does not exist
select *
from pl
where not exists (
select * from plProducts p
where p.plid = pl.plid and p.productidentifier = 'dental'
);
CodePudding user response:
There are multiple ways to approach this problem. You might be interested in looking at outer apply
. It could be a useful approach in more complicated scenarios.
select pl.*
from pl outer apply (
select count(*) as hasdental from plproducts pp
where p2.plid = pl.plid and pl.productidentifier = 'dental'
) as oa
where hasdental = 0;