我希望在我的一个表中存在特殊条目时选择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(我猜是空的也可以)。
答案 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;