需要一个通用查询来使用“EXISTS”关键字检查行是否存在

FAR*_*SiM 1 mysql sql sql-server postgresql

以下查询适用于 PostgreSQL 和 MS SQL,但不适用于 MYSQL

SELECT 1 as retVal WHERE EXISTS (SELECT 1 FROM posts WHERE topic = 'Sports')
Run Code Online (Sandbox Code Playgroud)

以下查询适用于 PostgreSQL 和 MySQL,但不适用于 MS SQL

SELECT EXISTS (SELECT 1 FROM posts WHERE topic = 'Sports')
Run Code Online (Sandbox Code Playgroud)

需要一个适用于所有三个供应商的查询。

Gor*_*off 5

用于case这些数据库:

SELECT (CASE WHEN EXISTS (SELECT 1 FROM posts WHERE topic = 'Sports')
             THEN 1 ELSE 0
        END) as retval
Run Code Online (Sandbox Code Playgroud)

FROM这在需要子句的数据库(例如 Oracle 和 DB2)中不起作用。您可以通过创建一个名为的表dual并将其放在数据库中来解决这个问题:

SELECT (CASE WHEN EXISTS (SELECT 1 FROM posts WHERE topic = 'Sports')
             THEN 1 ELSE 0
        END) as retval
FROM dual;
Run Code Online (Sandbox Code Playgroud)

或者,以下内容应该适用于任何数据库:

SELECT (CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END) as retval
FROM posts
WHERE topic = 'Sports';
Run Code Online (Sandbox Code Playgroud)

但是,它的效率低于使用EXISTS.