it-swarm.com.de

Wie verwende ich Select Exists in Oracle?

Was ist das Äquivalent zuSQL QueryinOracle?

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

Ich möchte nur eine Oracle-Abfrage, bei der vorhanden ist, und es gibt 0 oder 1 wie oben.

7
The Light

Das Äquivalent wäre:

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

Dies würde die gleiche Ausgabe zeigen. Die Variable CAST wurde einfach entfernt und ein FROM dual hinzugefügt, da Oracle Abfragen mit SELECT und ohne FROM nicht zulässt:

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

Getestet beiSQL-Geige

7
ypercubeᵀᴹ

Sie könnten es schreiben:

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

Dies gibt 0-1 zurück und der Optimierer erhält, dass die Abfrage für den Zugriff in der ersten Zeile optimiert werden soll.

4
Vincent Malgrat

Sie können MAX auch mit CASE verwenden:

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

Sie können eine der folgenden Abfragen verwenden: (Die erste ist performanter)

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; 
0
Leon