是否有一种跨数据库(至少 SQL Server、Oracle、Postgre、MySQL、SQLite)的方式来做我在 T-SQL 中所做的事情
SELECT 1 WHERE EXISTS (SELECT * FROM Foo WHERE Bar = 'Quux')
这似乎不是有效的 ANSI SQL 语法,因为没有 FROM 子句。目前我正在使用 COUNT(*) 来执行此操作,但我认为这不是最佳选择。
子查询是不必要的 - 使用:
SELECT DISTINCT
1
FROM Foo
WHERE Bar = 'Quux'
一个更复杂的版本,使用聚合和 CASE 表达式:
SELECT CASE
WHEN COUNT(*) >= 1 THEN 1
ELSE 0
END
FROM Foo
WHERE Bar = 'Quux'
有点作弊,但这应该可以工作,DISTINCT 1 FROM Foo
除了最愚蠢的 DBMS 之外,其他人都应该对它进行微不足道的优化!
SELECT DISTINCT 1 FROM Foo WHERE EXISTS (SELECT * FROM Foo WHERE Bar = 'Quux')
只需使用 COUNT 直到您需要其他方式。假设对 Bar 和 index 具有良好的选择性,它不会太重要,但会更具可读性
SELECT COUNT(Bar) FROM Foo WHERE Bar = 'Quux'
当然,您将用优化换取可移植性,所以在这种情况下使用 COUNT