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

`SELECT`ステートメントがより大きなSQLステートメントの一部として使用される場合を説明するために使用されるSQL用語。大きい方のステートメントはDMLである可能性があり、常に括弧または括弧内にあります。

3
このクエリが機能するのはなぜですか?
Oracle 12cでは、table_a(id、name)とtable_b(id)の2つのテーブルがあります。 このクエリが例外を返さないのはなぜですか? select * from table_a where name in (select name from table_b); 私が理解していることから、Oracleはこれを select * from table_a where name = name; しかし、私が得られないのはなぜですか?

7
選択サブクエリから複数の列を取得する
SELECT *, p.name AS name, p.image, p.price, ( SELECT ps.price FROM product_special ps WHERE p.id = ps.id AND ps.date < NOW() ORDER BY ps.priority ASC, LIMIT 1 ) AS special_price, ( SELECT ps.date FROM product_special ps WHERE p.id = ps.id AND ps.date < NOW() ORDER BY ps.priority ASC, LIMIT 1 …
24 subquery 

2
メインクエリのエイリアスと同じサブクエリのエイリアス
エイリアスがそのサブクエリのエイリアスのいくつかと同じであるSQLクエリがあります。 例えば: select * from ROOM r where ... ( select * from ROAD r where ... ) サブクエリのエイリアスはメインのエイリアスを隠すように見えるため、これはうまく機能します。 それはすべての場合にそのように機能しますか? 未定義の結果を取得することはありますか? それが問題ない場合、メインクエリの参照を作成するにはどうすればよいrですか?

2
サブクエリを介して複数の列を選択する
次のクエリのサブクエリから2列を選択しようとしていますが、選択できません。エイリアステーブルを作成しようとしましたが、まだ取得できませんでした。 SELECT DISTINCT petid, userid, (SELECT MAX(comDate) FROM comments WHERE petid=pet.id) AS lastComDate, (SELECT userid FROM comments WHERE petid=pet.id ORDER BY id DESC LIMIT 1) AS lastPosterID FROM pet LEFT JOIN comments ON pet.id = comments.petid WHERE userid='ABC' AND deviceID!='ABC' AND comDate>=DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MONTH); 基本的に、私は同じ行からlastComDate&を取得しようとしていますlastPosterID-特定のペットのコメントの最新の行です。効率的な方法でそれらを取得する方法を提案してください。 上記のクエリは機能しますが、同じ行が2回フェッチされるため、過剰に思えます。さらに、ORDER BYクエリのプロファイリング中に見つけたように、句は集計関数よりもかなり遅くなります。そのため、ソートを回避するソリューションが必要です。

3
サブクエリを使用した大きなテーブルでの更新が遅い
でSourceTable> 15MMレコードとなるBad_Phrase> 3Kの記録を持つ、次のクエリは、SQL Server 2005のSP4上で実行するために、ほぼ10時間かかります。 UPDATE [SourceTable] SET Bad_Count= ( SELECT COUNT(*) FROM Bad_Phrase WHERE [SourceTable].Name like '%'+Bad_Phrase.PHRASE+'%' ) 英語では、このクエリは、フィールドのサブているBad_Phraseに記載されている明確なフレーズの数カウントしているName中でSourceTable、その後のフィールドにその結果を置くことをBad_Count。 このクエリを非常に高速に実行する方法についての提案をお願いします。

1
サブクエリが並列処理を使用し、結合が使用しないのはなぜですか?
サブクエリを使用するこのクエリを実行するときに、SQL Serverが並列処理を使用するのはなぜですか?結合バージョンはシリアルで実行され、完了するまでに約30倍時間がかかります。 参加バージョン:〜30秒 副照会バージョン:<1秒 編集: クエリプランのXmlバージョン: JOINバージョン サブクエリバージョン

1
サブクエリを使用する場合のPostgresエラー[GROUP BY句に表示するか、集計関数で使用する必要があります]
2つのテーブルemployeeとがありphonesます。従業員は0〜n個の電話番号を持つことができます。従業員の名前と電話番号をリストしたいと思います。私はうまく動作する以下のクエリを使用しています。 SELECT empname,array_agg(phonenumber) AS phonenumbers FROM employee LEFT OUTER JOIN phones ON employee.empid = phones.empid GROUP BY employee.empid 従業員表には多数の行が含まれる場合があります。一度に数人の従業員のみを取得します。たとえば、電話番号で3人の従業員を取得します。このクエリを実行しようとしています。 SELECT empname,array_agg(phonenumber) AS phonenumbers FROM (SELECT * FROM employee ORDER BY empname LIMIT 3 OFFSET 0) AS employee LEFT OUTER JOIN phones ON employee.empid = phones.empid GROUP BY employee.empid しかし、私はこのエラーを受け取ります。ERROR: column …

1
日付の比較を行うサブクエリのパフォーマンスが悪い
サブクエリを使用して、一致するフィールドを持つすべての以前のレコードの合計数を検索する場合、5万件のレコードがあるテーブルでパフォーマンスはひどいです。サブクエリがなければ、クエリは数ミリ秒で実行されます。サブクエリを使用すると、実行時間は1分以上になります。 このクエリの場合、結果は次のようになります。 特定の日付範囲内のレコードのみを含めます。 日付範囲に関係なく、現在のレコードを含まない、以前のすべてのレコードのカウントを含めます。 基本的なテーブルスキーマ Activity ====================== Id int Identifier Address varchar(25) ActionDate datetime2 Process varchar(50) -- 7 other columns サンプルデータ Id Address ActionDate (Time part excluded for simplicity) =========================== 99 000 2017-05-30 98 111 2017-05-30 97 000 2017-05-29 96 000 2017-05-28 95 111 2017-05-19 94 222 2017-05-30 推測される結果 日付範囲のため2017-05-29に2017-05-30 …

2
サブクエリを使用してSQLを削除する方法
次のコードは、テーブルから重複するレコードを削除するために開発者の1人によって追加されました。 DELETE SubQuery FROM ( SELECT ID ,FK1 ,FK2 ,CreatedDateTime ,ROW_NUMBER() OVER(PARTITION BY FK1, FK2 ORDER BY CreatedDateTime) AS RowNumber FROM Table ) AS SubQuery WHERE RowNumber > 1 コードをレビューするとき、私はそれが機能しないと仮定しましたが、テスト環境(SQL 2014)でテストするとそれが機能することがわかります! SQLはサブクエリを解決し、レコードを削除する方法をどのように知っていますかtable?

1
SQL Serverクエリの動作が、UPDATEとSELECTで異なるのはなぜですか?
フィールドでパーティション分割した後、レコードを連続番号に更新するSQL Serverクエリを作成しました。SELECTステートメントとして実行すると、すべてが見栄えがします。 DECLARE @RunDetailID INT = 448 DECLARE @JobDetailID INT SELECT @JobDetailID = [JobDetailID] FROM [RunDetails] WHERE [RunDetailID] = @RunDetailID SELECT [OrderedRecords].[NewSeq9], RIGHT([OrderedRecords].[NewSeq9], 4) FROM ( SELECT [Records].*, [Records].[SortField] + RIGHT('0000' + CAST(ROW_NUMBER() OVER(PARTITION BY [Records].[SortField] ORDER BY [Records].[RunDetailID], [Records].[SortField], [Records].[PieceID]) AS VARCHAR), 4) NewSeq9 FROM ( SELECT [MRDFStorageID], [RunDetailID], …

3
SQLITE:タグと製品の問題
次のことを行うクエリを作成する方法を探しています。 3つのテーブルについて考えてみましょう。 製品:製品リスト タグ:タグのリスト tag_ties:タグを製品に関連付けるために使用されるテーブル 各テーブルについてこの構造を考えてみましょう: 製品: id(int、autoincrement) 名前(varchar、製品名) タグ: id(int自動インクリメント) ラベル(varchar、タグのラベル) Tag_ties: id(int、autoincrement) tag_id(int、タグIDへの参照) ref_id(int、製品IDへの参照) 私が欲しいもの: たとえば、タグID 10、11、および12でタグ付けされたすべての製品を取得します。 このクエリは機能しません。少なくとも1つのタグを持つ製品が返されるためです。 select p.name as name, p.id as id from products p inner join tag_ties ties on p.id=ties.ref_id where ties.ref_id=p.id and ties.tag_id in (10,11,12) group by p.id order by p.name asc
10 query  sqlite  subquery 

3
サブクエリを追加するとPostgreSQLクエリが非常に遅くなる
150万行のテーブルに対する比較的単純なクエリがあります。 SELECT mtid FROM publication WHERE mtid IN (9762715) OR last_modifier=21321 LIMIT 5000; EXPLAIN ANALYZE 出力: Limit (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1) -> Bitmap Heap Scan on publication (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1) Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321)) -> BitmapOr (cost=8.84..8.84 rows=1 …

1
MySQL:内部クエリで「ORDER BY」を使用してUNIONを最適化する
同じレイアウトの複数のテーブルで構成されるロギングシステムをセットアップしただけです。 データソースごとに1つのテーブルがあります。 ログビューアについて、私はしたいです UNIONすべてのログテーブル、 アカウントでそれらをフィルタリングし、 ソースを識別するための疑似列を追加し、 時間順に並べ替え、 そして、ページ分割のためにそれらを制限します。 すべてのテーブルにzeitpunktは、インデックス付きの日付/時刻列であるというフィールドが含まれています。 私の最初の試みは: (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt AS zeit, 'hp' AS source FROM is_log AS l WHERE l.account_id = 730) UNION (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt, 'ig' AS source FROM ig_is_log AS l WHERE l.account_id = 730) ORDER …

1
以下のクエリから階層値を取得するにはどうすればよいですか?
という名前Categoryの列を持つテーブルという名前のテーブルがありますCategoryID。と呼ばれる同じテーブルに参照列がありますfParentCategoryID。 すべてのカテゴリIDとそのサブカテゴリIDをカンマで区切る必要があります。例 -10の親カテゴリIDが1で、20の親カテゴリIDが10の場合、カテゴリID 20を印刷するとき、1と10の両方を親としてカンマ区切り値で印刷する必要があります。 以下のクエリを試してみましたがNULL、ParChild列が表示されます。助けてください。 ;WITH cteReports AS ( SELECT c.CategoryID, c.fParentCategoryID, [level] = 1, ParChild=cast(CAST(c.fParentCategoryID AS VARCHAR(200)) + ',' + CAST(c.CategoryID AS VARCHAR(200)) AS VARCHAR(MAX)) FROM retail.Category c WHERE c.fParentCategoryID is NULL UNION ALL SELECT c.CategoryID, c.fParentCategoryID, [level] + 1, ParChild = ParChild + ',' + CAST(c.CategoryID AS VARCHAR(200)) …

3
値のいずれかがサブクエリ結果にあるかどうかを確認します
注文IDのリストを返す複雑なサブクエリがあります。これらの注文がある顧客のリストを取得する必要があります。問題は、顧客を注文に割り当てる方法が2つあることです(2つのフィールドのうちの1つ)。私はこのようなことをすることができます: select * from Customers where orderId in (select...) or secondaryOrderId in (select ...) 問題は、サブクエリが実行にかかる時間と画面スペースの両方で非常に大きいことです。いずれかのフィールドに目的の結果が含まれているかどうかを確認する方法はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.