タグ付けされた質問 「exists」

4
LEFT JOINまたはNOT EXISTSの使用のベストプラクティス
LEFT JOINまたはNOT EXISTS形式を使用する間にベストプラクティスはありますか? 一方を他方より使用する利点は何ですか? 存在しない場合、どちらを優先すべきですか? SELECT * FROM tableA A LEFT JOIN tableB B ON A.idx = B.idx WHERE B.idx IS NULL SELECT * FROM tableA A WHERE NOT EXISTS (SELECT idx FROM tableB B WHERE B.idx = A.idx) SQL Serverデータベースに対してAccess内でクエリを使用しています。

2
存在する場合、埋め込みSELECTステートメントよりも時間がかかります
次のコードを実行すると、22.5分かかり、1億6千万回の読み取りを行います。ただし、内側のselectステートメントだけを実行すると、15秒しかかからず、264kの読み取りが実行されます。補足として、選択クエリはレコードを返しません。 なぜIF EXISTSそれが非常に長く実行され、非常に多くの読み取りを行うのでしょうか?select文も変更しSELECT TOP 1 [dlc].[id]て、2分後に殺しました。 一時的な修正として、count(*)を実行し、その値を変数に割り当てるように変更しました@cnt。次に、IF 0 <> @cntステートメントを実行します。しかしEXISTS、selectステートメントでレコードが返された場合、少なくとも1つのレコードが見つかったらスキャン/シークの実行を停止count(*)し、完全なクエリを完了するため、より良いと思いました。私は何が欠けていますか? IF EXISTS (SELECT [dlc].[ID] FROM TableDLC [dlc] JOIN TableD [d] ON [d].[ID] = [dlc].[ID] JOIN TableC [c] ON [c].[ID] = [d].[ID2] WHERE [c].[Name] <> [dlc].[Name]) BEGIN <do something> END

3
IF EXISTSでクエリをラップすると非常に遅くなる
私は以下のクエリを持っています: select databasename from somedb.dbo.bigtable l where databasename ='someval' and source <>'kt' and not exists(select 1 from dbo.smalltable c where c.source=l.source) 上記のクエリは3秒で完了します。 上記のクエリが値を返す場合、ストアドプロシージャを終了する必要があるため、次のように書き直しました。 If Exists( select databasename from somedb.dbo.bigtable l where databasename ='someval' and source <>'kt' and not exists(select 1 from dbo.smalltable c where c.source=l.source) ) Begin Raiserror('Source missing',16,1) Return …

1
SQL仕様ではEXISTS()にGROUP BYが必要ですか?
マイクロソフトでは現在、この構文を許可しています。 SELECT * FROM ( VALUES (1) ) AS g(x) WHERE EXISTS ( SELECT * FROM ( VALUES (1),(1) ) AS t(x) WHERE g.x = t.x HAVING count(*) > 1 ); ノーがあることに注意してくださいGROUP BYにEXISTS句は、その有効なANSI SQLです。それとも単に実装の詳細を公開するだけなのでしょうか。 参考までに、これと同じ構文はPostgreSQLでは許可されていません。 エラー:列 "tx"はGROUP BY句に出現するか、集計関数で使用する必要があります しかし、この構文は許可されています。 SELECT * FROM ( VALUES (1) ) AS g(x) WHERE EXISTS …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.