SQL语句是否存在条目

时间:2016-03-10 19:46:03

标签: sql plsql

我希望在我的一个表中存在特殊条目时选择1,否则为0。

我想这样做:

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(我猜是空的也可以)。

1 个答案:

答案 0 :(得分: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;