以下查询适用于PostgreSQL和MS SQL,但不适用于MYSQL
SELECT 1 as retVal WHERE EXISTS (SELECT 1 FROM posts WHERE topic = 'Sports')
以下查询适用于PostgreSQL和MySQL,但不适用于MS SQL
SELECT EXISTS (SELECT 1 FROM posts WHERE topic = 'Sports')
需要一个适用于所有三家供应商的查询。
答案 0 :(得分:4)
对这些数据库使用case
:
SELECT (CASE WHEN EXISTS (SELECT 1 FROM posts WHERE topic = 'Sports')
THEN 1 ELSE 0
END) as retval
这在需要FROM
子句的数据库(例如Oracle和DB2)中不起作用。您可以通过创建一个名为dual
的表并将其放在数据库中来解决这个问题:
SELECT (CASE WHEN EXISTS (SELECT 1 FROM posts WHERE topic = 'Sports')
THEN 1 ELSE 0
END) as retval
FROM dual;
或者,以下内容适用于任何数据库:
SELECT (CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END) as retval
FROM posts
WHERE topic = 'Sports';
但是,它的效率低于使用EXISTS
的版本。