如何使用一个SQL语句的输出在另一
问题描述:
我有以下声明:如何使用一个SQL语句的输出在另一
select region_id from regions
where region_name = 'Europe'
我需要这在下面的语句的输出,其中“喇嘛”是:
select count(*) from countries
where region_id = 'bla'
我怎样才能做到这一点?
答
select distinct * from countries
where region_id IN (select region_id from regions
where region_name = 'Europe')
答
使用EXISTS:
SELECT c.*
FROM COUNTRIES c
WHERE EXISTS (SELECT NULL
FROM REGIONS r
WHERE r.region_id = c.region_id
AND r.region_name = 'Europe')
我的选择是使用EXISTS,而不是因为:
- 在甲骨文
IN
有1000个值的极限 -
EXISTS
,您可以匹配多列如有必要 -
EXISTS
回报在第一场比赛真正的,可以比在/ etc根据需要
大多数错误EXISTS
为相关子查询更快,但它执行所不同&不评估SELECT
条款 - 您可以测试使用:
SELECT c.*
FROM COUNTRIES c
WHERE EXISTS (SELECT 1/0
FROM REGIONS r
WHERE r.region_id = c.region_id
AND r.region_name = 'Europe')
+0
我不确定你喜欢'INISTS'而不是'IN'的理由是完全有效的。用'IN'限制1,000个值只有在与表达式列表比较而不是子查询时,'IN'可以与多个列一起工作,尽管语法有点笨拙,'IN'和'EXISTS'会如果可能,通常使用相同的执行计划 –
您对我们改变了查询!它起始于'distinct *',现在是'count(*)',为什么所有的答案都不同步。 –