Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
191 views
in Technique[技术] by (71.8m points)

sql - How to rewrite a subquery with a join

Heyho, I need to rewrite the following code without useing a subquery:

SELECT country, region, name
FROM wcities
WHERE( country, region ) NOT IN ( SELECT country, code FROM regions )
AND country = 'IT'
AND region is NOT NULL;

I tried it with:

select c.country, c.region, c.name
from wcities c
join regions r on c.country <> r.country AND c.region <> r.code
where c.country = 'IT' 
AND c.region is NOT NULL;

I can see why that does not work, but I can't see what I need to do it.

Thanks in advance :)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

As a left join this would be:

SELECT c.country, c.region, c.name
FROM wcities c LEFT JOIN
     regions r
     ON r.country = c.country and r.region = c.region
WHERE r.country IS NULL AND
      c.country = 'IT' AND
      c.region is NOT NULL;

That said, I would recommend NOT EXISTS for this purpose:

SELECT c.country, c.region, c.name
FROM wcities c         
WHERE NOT EXISTS (SELECT 1
                  FROM regions r
                  WHERE r.country = c.country and r.region = c.region
                 ) AND
      c.country = 'IT' AND
      c.region is NOT NULL;

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...