如何使用Oracle中的Select Exists?

时间:2013-05-15 10:03:54

标签: sql oracle

SQL Query Oracle 的等效内容是什么?

SELECT CAST(
   CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') THEN 1 
   ELSE 0 
   END 
AS BIT)

我只想要一个oracle查询,其中使用了exists,它返回0或1,如上所述。

5 个答案:

答案 0 :(得分:13)

等价物是:

select count(*) 
from dual 
where exists (SELECT * FROM theTable where theColumn like 'theValue%')

答案 1 :(得分:7)

这将显示相​​同的输出。刚删除了CAST并添加了FROM dual,因为Oracle不允许使用SELECTFROM进行查询:

SELECT 
   CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like 'theValue%') 
     THEN 1 
     ELSE 0 
   END 
FROM dual ;

SQL-Fiddle

进行测试

答案 2 :(得分:4)

你可以写下来:

SELECT COUNT(*) FROM theTable WHERE theColumn LIKE 'theValue%' AND ROWNUM = 1

这将返回0-1,优化器会获得针对第一行访问优化查询的信息。

答案 3 :(得分:2)

您还可以将MAX与CASE一起使用:

SELECT MAX(
   CASE 
     WHEN theColumn like 'theValue%' THEN 1 
   ELSE 
     0 
   END)  
AS BIT
FROM theTable

答案 4 :(得分:0)

您可以使用以下查询之一:(第一个查询效率更高)

SELECT H.TABLE_ID, H.OTHER_FIELD, 
(SELECT 'YES' FROM DUAL WHERE EXISTS (SELECT  'X' FROM TABLE_DETAIL DT
WHERE DT.TABLE_ID = H.TABLE_ID) ) WITH_DETAIL FROM TABLE_HEADER H; 
SELECT H.TABLE_ID, H.OTHER_FIELD, 
CASE WHEN EXISTS(SELECT * FROM IMTS.DETAIL_TABLE DT WHERE DT.TABLE_ID=H.TABLE_ID)  
THEN 'Y' ELSE 'N' END WITH_DETAIL FROM HEADER_TABLE H; 
SELECT H.TABLE_ID, H.OTHER_FIELD, NVL2(DT.SOME_NOTNULL_FIELD, 'YES','NO') WITH_DETAIL
FROM TABLE_HEADER H
LEFT JOIN TABLE_DETAIL DT ON DT.TABLE_ID=H.TABLE_ID AND ROWNUM<2;