Oracle sql 如果存在则返回true问题

问题描述 投票:0回答:6

如何检查表中是否存在特定元素 - 如何返回 true 或 false?

我有一张桌子,里面有

  • 用户 ID
  • 用户密码
  • user_secretQ

口头上,我想这样做:如果特定的

user_id
存在于
user_id
列中,则返回 true - 否则返回 false。

sql oracle if-statement exists
6个回答
54
投票

Oracle SQL 中没有布尔类型。您将需要返回 1 或 0 或一些类似的值并采取相应的操作:

SELECT CASE WHEN MAX(user_id) IS NULL THEN 'NO' ELSE 'YES' END User_exists
  FROM user_id_table
 WHERE user_id = 'some_user';

11
投票

在 PL/SQL 中你可以这样做:

function user_exists (p_user_id users.user_id%type) return boolean
is
  l_count integer;
begin
  select count(*)
  into   l_count
  from   users
  where  user_id = p_user_id;

  return (l_count > 0);
end;

这将用于调用 PL/SQL,如下所示:

if user_exists('john') then
  dbms_output.put_Line('John exists');
end if;

注意:我在查询中使用了 count(*),因为我知道在主键搜索的情况下这只会返回 1 或 0。 如果可能有多于一行,那么我会在查询中添加“and rownum = 1”,以防止不必要地计算许多记录只是为了找出是否存在:

function user_has_messages (p_user_id users.user_id%type) return boolean
is
  l_count integer;
begin
  select count(*)
  into   l_count
  from   messages
  where  user_id = p_user_id
  AND ROWNUM = 1;

  return (l_count > 0);
end;

9
投票

Oracle RDBMS 没有布尔数据类型,只能在 PL/SQL 中使用布尔变量。

如果您只想返回字符串“TRUE”和“FALSE” 你可以做到这一点..

SELECT 'TRUE'  FROM DUAL WHERE EXISTS (SELECT 'x' FROM  table WHERE user_id = 'id')
UNION
SELECT 'FALSE' FROM DUAL WHERE NOT EXISTS (SELECT 'x' FROM  table WHERE user_id = 'id')

不过我喜欢@DCookie 的查询。


5
投票

select count(*) from table where userid = :userid and rownum <= 1); -- If exists then 1 else 0


3
投票

或者你可以这样做:

select decode(max(USER_ID), null, 'FALSE', 'TRUE') BOOL_VAL
from USER_TABLE where USER_ID = [some USER_ID here]

0
投票

我使用类似的东西使用Oracle

SELECT CASE WHEN EXISTS (
    { MY SELECT QUERY HERE }
) THEN 1 ELSE 0 END AS result
FROM DUAL;

例如:

SELECT CASE WHEN EXISTS (
    SELECT 1
    FROM mytable t
    WHERE t.column1 = 1234 AND t.column2 = 4444
) THEN 1 ELSE 0 END AS result
FROM DUAL;
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.