是否存在跨数据库(至少SQL Server,Oracle,Postgre,MySQL,SQLite)使用
在T-SQL中执行的操作方式SELECT 1 WHERE EXISTS (SELECT * FROM Foo WHERE Bar = 'Quux')
似乎这不是有效的ANSI SQL语法,因为没有FROM子句。目前我使用COUNT(*)来做这件事,但我认为这不是最佳的。
答案 0 :(得分:4)
子查询是不必要的 - 使用:
SELECT DISTINCT
1
FROM Foo
WHERE Bar = 'Quux'
更复杂的版本,使用聚合和&案例表达:
SELECT CASE
WHEN COUNT(*) >= 1 THEN 1
ELSE 0
END
FROM Foo
WHERE Bar = 'Quux'
答案 1 :(得分:1)
作弊一点,但这应该有效,DISTINCT 1 FROM Foo
应该被除了最愚蠢的DBMS之外的所有人优化!
SELECT DISTINCT 1 FROM Foo WHERE EXISTS (SELECT * FROM Foo WHERE Bar = 'Quux')
答案 2 :(得分:0)
除非您需要,否则请使用COUNT。假设对Bar和index有很好的选择性,那就没那么重要了,但会更具可读性
SELECT COUNT(Bar) FROM Foo WHERE Bar = 'Quux'
当然,您将交换优化以实现可移植性,因此在这种情况下使用COUNT