2011-09-01 66 views
3

我有以下聲明:如何使用一個SQL語句的輸出在另一

select region_id from regions 
where region_name = 'Europe' 

我需要這在下面的語句的輸出,其中「喇嘛」是:

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

我怎樣才能做到這一點?

+0

您對我們改變了查詢!它起始於'distinct *',現在是'count(*)',爲什麼所有的答案都不同步。 –

回答

4

嘗試IN clause

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

子查詢到救援!

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

2

使用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'會如果可能,通常使用相同的執行計劃 –

相關問題