2

是否有一种跨数据库(至少 SQL Server、Oracle、Postgre、MySQL、SQLite)的方式来做我在 T-SQL 中所做的事情

SELECT 1 WHERE EXISTS (SELECT * FROM Foo WHERE Bar = 'Quux')

这似乎不是有效的 ANSI SQL 语法,因为没有 FROM 子句。目前我正在使用 COUNT(*) 来执行此操作,但我认为这不是最佳选择。

4

3 回答 3

4

子查询是不必要的 - 使用:

SELECT DISTINCT 
       1 
  FROM Foo 
 WHERE Bar = 'Quux'

一个更复杂的版本,使用聚合和 CASE 表达式:

SELECT CASE
         WHEN COUNT(*) >= 1 THEN 1 
         ELSE 0
       END
  FROM Foo 
 WHERE Bar = 'Quux'
于 2011-05-22T17:00:08.500 回答
1

有点作弊,但这应该可以工作,DISTINCT 1 FROM Foo除了最愚蠢的 DBMS 之外,其他人都应该对它进行微不足道的优化!

SELECT DISTINCT 1 FROM Foo WHERE EXISTS (SELECT * FROM Foo WHERE Bar = 'Quux')

于 2011-05-22T15:27:05.370 回答
0

只需使用 COUNT 直到您需要其他方式。假设对 Bar 和 index 具有良好的选择性,它不会太重要,但会更具可读性

SELECT COUNT(Bar) FROM Foo WHERE Bar = 'Quux'

当然,您将用优化换取可移植性,所以在这种情况下使用 COUNT

于 2011-05-22T15:33:13.253 回答