2016-03-10 2 views
1

я хочу, чтобы выбрать 1, когда специальная запись существует в одной из моих таблиц, в противном случае 0.SQL заявление, существует ли запись

Я думал сделать это следующим образом:

SELECT 1 FROM dual ..... 

В PLSQL это было бы так:

SELECT CASE 
     WHEN EXISTS (
       SELECT 1 
       FROM * TABLE * 
       WHERE * requirements * 
       ) 
      THEN 1 
     ELSE 0 
     END 
INTO * variable * 
FROM dual; 

Но я понятия не имею, как реализовать что-то подобное в обычном SQL.

Я просто хочу получить 1, если запись существует и в противном случае 0 (нуль также будет хорошо, я думаю).

+0

Не уверен, что именно то, что вы имеете в виду, что-то вроде этого? 'select count (1) из таблицы где key = value;' Это вернет 0 или 1 –

+0

Я действительно имел в виду что-то еще, но идея с count() работает с моей конкретной реализацией следующих шагов. Так что спасибо за идею :) –

+0

Не знаете, что вы имеете в виду под «нормальным SQL». Но если вы хотите переписать его для ANSI SQL, вам просто нужно удалить последние две строки 'INTO * variable * FROM dual;' и выбор должен работать нормально. – Ralph

ответ

1

Если я получу вас правильно, вы можете использовать функцию агрегации COUNT.

Моя установка (возможно, не лучший способ):

Oracle XE 11g (OpenSuse, VirtualBox), Oracle SQL Developer 4.1.3.20 (Windows 10)

SET SERVEROUTPUT ON 
SET FEEDBACK OFF 
CLEAR SCREEN; 

CREATE TABLE test1(
    id NUMBER, 
    text VARCHAR2(255) 
) ; 

INSERT INTO test1 VALUES (1, 'abc'); 
INSERT INTO test1 VALUES (2, 'def'); 
INSERT INTO test1 VALUES (3, 'ghi') ; 
COMMIT; 

-- False (Result = 0) 
SELECT DECODE(COUNT(*), 0, 0, 1) 
FROM TEST1 
WHERE id IS NULL 
AND TEXT = 'adadas'; 

-- True (Result = 1) 
SELECT DECODE(COUNT(*), 0, 0, 1) 
FROM TEST1 
WHERE ID =2; 

-- Anonymous PL/SQL Block Test 
DECLARE 
    V_TEST_VAR INTEGER; 
BEGIN 
    -- FALSE Case: 
    SELECT DECODE(COUNT(*), 0, 0, 1) 
    INTO V_TEST_VAR 
    FROM TEST1 
    WHERE ID = 4711; 

    CASE V_TEST_VAR 
     WHEN 0 THEN 
     DBMS_OUTPUT.PUT_LINE('FALSE'); 
     WHEN 1 THEN 
     DBMS_OUTPUT.PUT_LINE('FALSE'); 
    END CASE; 

    -- TRUE Case: 
    SELECT DECODE(COUNT(*), 0, 0, 1) 
    INTO V_TEST_VAR 
    FROM TEST1 
    WHERE ID = 1; 

    CASE V_TEST_VAR 
     WHEN 1 THEN 
     DBMS_OUTPUT.PUT_LINE('TRUE'); 
     WHEN 0 THEN 
     DBMS_OUTPUT.PUT_LINE('FALSE'); 
    END CASE; 

END; 
/
DROP TABLE test1; 
Смежные вопросы