2

クロスデータベース(少なくともSQL Server、Oracle、Postgre、MySQL、SQLite)を使用して、T-SQLで行うことを実行する方法はありますか?

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

FROM句がないため、これは有効なANSISQL構文ではないようです。現在、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 を使用してください。バーとインデックスの選択性が良好であると仮定すると、それほど重要ではありませんが、はるかに読みやすくなります。

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

もちろん、移植性のために最適化を犠牲にするので、この場合は COUNT を使用します

于 2011-05-22T15:33:13.253 に答える