如何使用一个SQL语句的输出在另一

问题描述:

我有以下声明:如何使用一个SQL语句的输出在另一

select region_id from regions 
where region_name = 'Europe' 

我需要这在下面的语句的输出,其中“喇嘛”是:

select count(*) from countries 
where region_id = 'bla' 

我怎样才能做到这一点?

+0

您对我们改变了查询!它起始于'distinct *',现在是'count(*)',为什么所有的答案都不同步。 –

尝试IN clause

select distinct * from countries 
where region_id IN (select region_id from regions 
where region_name = 'Europe') 

子查询到救援!

select distinct * 
from countries 
where region_id=(select top 1 ir.region_id 
       from regions ir 
       where ir.region_name = 'Europe') 

或者,您可以使用in并为其提供查询返回的项目列表。

+1

Oracle中没有'TOP' – mcabral

+0

你看看吗,他们没有添加任何限制......我被MSSQL宠坏了。 – Blindy

使用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'会如果可能,通常使用相同的执行计划 –