クロスデータベース(少なくともSQL Server、Oracle、Postgre、MySQL、SQLite)を使用して、T-SQLで行うことを実行する方法はありますか?
SELECT 1 WHERE EXISTS (SELECT * FROM Foo WHERE Bar = 'Quux')
FROM句がないため、これは有効なANSISQL構文ではないようです。現在、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 を使用してください。バーとインデックスの選択性が良好であると仮定すると、それほど重要ではありませんが、はるかに読みやすくなります。
SELECT COUNT(Bar) FROM Foo WHERE Bar = 'Quux'
もちろん、移植性のために最適化を犠牲にするので、この場合は COUNT を使用します