在postgresql中检查一行是否存在

21

我在SO上看到了很多关于这个的帖子,但是我没有得到答案。 我想查询是否在表中存在特定行。 如果存在,则应该返回一个字符串 true 并停止搜索,如果不存在,则返回false。


2
你尝试了什么?你如何指定行?通过rowid还是所有属性的值?它必须是一个查询,还是PL/SQL函数也可以接受? - toniedzwiedz
2个回答

60
select
  case when exists (select true from table_name where table_column=?)
    then 'true'
    else 'false'
  end;

但最好返回布尔值而不是字符串:

select exists (select true from table_name where table_column=?);

-17

剧透:

-- EXPLAIN ANALYZE
WITH magic AS (
        WITH lousy AS ( SELECT * FROM one  WHERE num = -1)
        SELECT 'True'::text AS truth
        WHERE EXISTS  (SELECT * FROM lousy)
        UNION ALL
        SELECT 'False'::text AS truth
        WHERE NOT EXISTS (SELECT * FROM lousy)
        )
SELECT *
FROM magic
        ;

9
你写的内容对我来说甚至也是胡言乱语。你不应该提供一个故意混淆但却可以运行的例子来进行辅导,这样只会让人觉得像是在阅读The Daily WTF一样。你可以举例说明caseexists的文档,因为这只有对已经了解这些内容的人才有用。 - Tometzky
6
除了提问者之外,其他人也会阅读这个答案,试图解决他们自己类似的问题。 - user1454117
@LeviStanley:他们可以尝试另一种解决方案(显然更有信誉),或者尝试我的(虽然不同和奇怪,但实际上有效)。如果他们不喜欢我的风格,他们应该发展自己的风格。(否则他们就不会不喜欢我的风格) - wildplasser
2
请注意,OP没有展示任何努力。这只是一个“gimmethecodez”问题,任何熟练掌握SQL的人都可以回答(甚至可能有多种方法可以达到相同的目标,而不仅仅是这两个答案)。 - wildplasser
这是一种非常混乱的检查存在方式,如果在实际场景中它不是极其缓慢的话,我会感到非常惊讶。 - redbmk
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接