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

SQL結合句は、2つ以上のテーブルまたはビューのレコードを結合します。

2
1つの大きなクエリまたは複数の小さなクエリの高速化とは何ですか?
私はさまざまな企業で働いていますが、一部の企業は、すべての「相対」テーブルを結合するビューを持つことを好むことに気付きました。しかし、その後、アプリケーション上で使用する必要があるのは1列のみです。 それでは、単純な選択を行い、それをシステムコードで「結合」する方が速いでしょうか? システムは、php、java、asp、データベースに接続する任意の言語です。 だから問題は、サーバー側(php、java、asp、ruby、python ...)からデータベースに行く方が速いか、必要なものをすべて取得する1つのクエリを実行するか、サーバー側からデータベースに移動して一度に1つのテーブルから列のみを取得するクエリ?

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
テーブル値関数でテーブルを結合する方法は?
ユーザー定義関数があります: create function ut_FooFunc(@fooID bigint, @anotherParam tinyint) returns @tbl Table (Field1 int, Field2 varchar(100)) as begin -- blah blah end 次のように、これを別のテーブルに参加させたいと思います。 select f.ID, f.Desc, u.Field1, u.Field2 from Foo f join ut_FooFunc(f.ID, 1) u -- doesn't work where f.SomeCriterion = 1 言い換えると、1であるすべてのFooレコードについて、の入力に対してから返されるおよびの値とともに、およびSomeCriterionを表示する必要があります。Foo IDDescField1Field2ut_FooFuncFoo.ID これを行うための構文は何ですか?

4
個々のクエリは結合よりも高速ですか?
概念的な質問:個々のクエリは結合よりも高速ですか、またはクライアント側で必要なすべての情報を1つの SELECTステートメントに絞り込もうとするか、便利だと思われるだけ使用する必要がありますか? TL; DR:結合されたクエリに個々のクエリを実行するよりも時間がかかる場合、これは私のせいですか、これは予想されることですか? まず、データベースに精通していないので、私だけかもしれませんが、複数のテーブルから情報を取得する必要がある場合、個々のテーブルで複数のクエリを使用してこの情報を取得する方が「多くの場合」高速であることに気付きました単純な内部結合を含む)、1つのクエリですべてのデータを取得できる(複雑な)結合クエリを作成しようとするクライアント側でデータをパッチします。 私は非常に単純な例を1つまとめようとしました。 SQLフィドル スキーマのセットアップ: CREATE TABLE MASTER ( ID INT NOT NULL , NAME VARCHAR2(42 CHAR) NOT NULL , CONSTRAINT PK_MASTER PRIMARY KEY (ID) ); CREATE TABLE DATA ( ID INT NOT NULL , MASTER_ID INT NOT NULL , VALUE NUMBER , CONSTRAINT PK_DATA PRIMARY KEY …

2
宣言された結合列の順序を変更するとソートが導入されるのはなぜですか?
同じ名前、タイプ、およびインデックスキー列を持つ2つのテーブルがあります。それらの1つには一意のクラスター化インデックスがあり、もう1つには非一意があります。 テストのセットアップ いくつかの現実的な統計を含むセットアップスクリプト: DROP TABLE IF EXISTS #left; DROP TABLE IF EXISTS #right; CREATE TABLE #left ( a char(4) NOT NULL, b char(2) NOT NULL, c varchar(13) NOT NULL, d bit NOT NULL, e char(4) NOT NULL, f char(25) NULL, g char(25) NOT NULL, h char(25) NULL --- and a …

1
同じクエリで異なる条件を持つPostgresカウント
Postgres 9.3の編集 次のスキーマを持つレポートを作成しています:http : //sqlfiddle.com/#!15 / fd104/2 現在のクエリは次のように正常に機能しています。 基本的には、3テーブルの内部結合です。私はこのクエリを作成しませんでしたが、それを残した開発者がクエリを変更したいと思います。ご覧のとおり、にTotalApplication基づいてアプリケーション全体をカウントしますa.agent_id。そしてtotalapplication、結果の列を見ることができます。私が望むのは、それを削除しtotalapplicationて、新しい2列に変更することです。私はA追加したいcompletedsurveyとpartitalsurvey列を。基本的にこの部分は SELECT a.agent_id as agent_id, COUNT(a.id) as CompletedSurvey FROM forms a WHERE a.created_at >= '2015-08-01' AND a.created_at <= '2015-08-31' AND disposition = 'Completed Survey' GROUP BY a.agent_id 私はちょうど追加しましたが、唯一の違いがある同じクエリを持つAND disposition = 'Completed Survey'別の列が必要ですpartialsurveycompletedsurvey AND disposition = 'Partial Survey' そして COUNT(a.id) as PartialSurvey しかし、私はそのクエリをどこに置くか、クエリがどのように見えるかを知らないので、最終的な出力にはこれらの列があります …

7
クエリを再現するために必要なデータベースのサブセットをmysqldumpすることは可能ですか?
バックグラウンド selectクエリを再現するために必要なデータベースのサブセットを提供したいと思います。私の目標は、計算ワークフローを再現可能にすることです(再現可能な研究のように)。 質問 このselectステートメントを、クエリされたデータを新しいデータベースにダンプするスクリプトに組み込んで、データベースを新しいmysqlサーバーにインストールし、ステートメントが新しいデータベースで機能するようにする方法はありますか。新しいデータベースには、クエリで使用されたレコードに加えてレコードを含めるべきではありません。 更新: 明確にするために、クエリ結果のcsvダンプには興味がありません。私ができる必要があるのは、データベースのサブセットをダンプして、別のマシンにインストールできるようにすることです。そうすれば、クエリ自体を再現可能にすることができます(同じデータセットに関して変更可能です)。 例 たとえば、私の分析では、複数の(この例では3つの)テーブルからのレコードを必要とするデータのサブセットを照会します。 select table1.id, table1.level, table2.name, table2.level from table1 join table2 on table1.id = table2.table1_id join table3 on table3.id = table2.table3_id where table3.name in ('fee', 'fi', 'fo', 'fum');

2
外部適用と左結合のパフォーマンス
SQL SERVER 2008 R2を使用しています 私はSQLでAPPLYに出会い、多くの場合にクエリの問題を解決する方法が大好きでした。 結果を取得するために2つの左結合を使用していたテーブルの多くは、1つの外部適用を取得できました。 ローカルDBテーブルに少量のデータがあり、展開後、コードは少なくとも20倍のデータで実行されるはずです。 大量のデータの場合、外部適用は2つの左結合条件よりも時間がかかることが心配です。 誰でも正確に適用がどのように機能し、それが非常に大きなデータのパフォーマンスにどのように影響するかを伝えることができますか?可能であれば、n1 ^ 1またはn1 ^ 2に比例するような各テーブルのサイズとの比例関係... n1はテーブル内の行数です1。 以下は、左結合が2つのクエリです。 select EC.*,DPD.* from Table1 eC left join ( select member_id,parent_gid,child_gid,LOB,group_gid,MAX(table2_sid) mdsid from Table2 group by member_id,parent_gid,child_gid,LOB,group_gid ) DPD2 on DPD2.parent_gid = Ec.parent_gid AND DPD2.child_gid = EC.child_gid AND DPD2.member_id = EC.member_id AND DPD2.LOB = EC.default_lob AND …

8
INNER JOINとOUTER JOINの違いは何ですか?
私はSQLを初めて使用しますが、これら2つのJOINタイプの違いを知りたいですか? SELECT * FROM user u INNER JOIN telephone t ON t.user_id = u.id SELECT * FROM user u LEFT OUTER JOIN telephone t ON t.user_id = u.id いつどちらを使用すればよいですか?
35 join 

1
JOIN句にUSING構文を使用すると、特定の場合に最適化の障壁が生じる可能性がありますか?
クエリの節のUSING(ではなくON)コンストラクトが、FROMSELECT一定の場合には、最適化の障壁を導入することがあります。 私はこのキーワードを意味します: 選択* から 参加b 使用した(A_ID) より複雑な場合にのみ。 コンテキスト:このコメントにこの質問。 私はこれをよく使いますが、これまでに気づいたことはありません。効果やリンクを示すテストケースに非常に興味があります詳細情報にます。私の検索努力は空っぽになりました。 完璧な答えは、表示するために、テストケースとなりUSING (a_id)、代替句に参加すると比較して劣った性能をON a.a_id = b.a_id- 場合はそれが実際に起こることができます。

6
ONとWHEREのインデックスパフォーマンス
私は2つのテーブルを持っています @T1 TABLE ( Id INT, Date DATETIME ) @T2 TABLE ( Id INT, Date DATETIME ) これらのテーブルには、(Id、Date)に非クラスター化インデックスがあります そして、私はこれらのテーブルに参加します SELECT * FROM T1 AS t1 INNER JOIN T2 AS t2 ON t1.Id = t2.Id WHERE t1.Date <= GETDATE() AND t2.Date <= GETDATE() これは次のように書くこともできます SELECT * FROM T1 AS t1 INNER …

3
Access(Jet)SQL:TableAの各DateTimeスタンプに隣接するTableBのDateTimeスタンプ
最初の言葉 あなたは安全に(を含む)以下のセクションを無視することができます結合します皮切りあなただけのコードの亀裂を取りたい場合。背景と結果がちょうど文脈としての役割を果たす。最初にコードがどのように表示されたかを確認するには、2015年10月6日より前の編集履歴をご覧ください。 目的 最終的には、表の観測値に直接隣接する表の利用可能なGPSデータのDateTimeスタンプに基づいて、送信機(XまたはXmit)の補間GPS座標を計算SecondTableしますFirstTable。 究極の目標を達成するための私の当面の目標は、これらの側面の時点を得るためにどのように参加FirstTableするのSecondTableが最善かを見つけることです。後で、その情報を使用して、正距円筒座標系に沿った線形近似を仮定して中間GPS座標を計算できます(このスケールでは、地球が球体であることを気にしないと言った派手な言葉)。 ご質問 最も近い前後のタイムスタンプを生成するより効率的な方法はありますか? 「after」を取得し、「after」に関連する場合にのみ「before」を取得することで、自分で修正しました。 (A<>B OR A=B)構造を含まない、より直感的な方法はありますか。 Byrdzeyeは基本的な選択肢を提供しましたが、私の「実世界」の経験は、同じことを実行する彼の4つの結合戦略すべてとは一致しませんでした。しかし、代替結合スタイルに対処したことに対する彼の完全な信用。 あなたが持つかもしれない他の考え、トリックやアドバイス。 両方Thusfar byrdzeyeとPhrancisはこの点で非常に役立っています。私は、ことがわかっPhrancis'アドバイスが、私はここに彼に端をあげるので良好、レイアウトおよび重要な段階での支援を提供しました。 質問3に関して私が受けることができる追加の助けをまだ感謝しています。 箇条書きは、個々の質問で私を最も助けたと思う人を反映しています。 テーブル定義 半視覚的表現 FirstTable Fields RecTStamp | DateTime --can contain milliseconds via VBA code (see Ref 1) ReceivID | LONG XmitID | TEXT(25) Keys and Indices PK_DT | Primary, Unique, No Null, Compound XmitID …

2
別のSELECTのWHERE句でSELECTを使用する
私はのためのlibpqの上にドラフトリモートアプリケーション作ったPostrgreSQLを。うまく動作しますが、アプリケーションの一般的な機能をプロファイルしました。私が作成する最終的なビジネス結果ごとに、40のselect句(tcpip経由)などを呼び出すことがあります。 リモートアプリケーションとデータベースの間のやり取りの数を最小限に抑えることを思い出させるSQL-Serverの思い出があります。選択を分析した結果、SELECT結合を使用してこの数を3つの節に減らすことができると思います。しかしSELECT、別のの結果を使用するための構文を覚えていませんSELECT。 例えば: SELECT * FROM individual INNER JOIN publisher ON individual.individual_id = publisher.individual_id WHERE individual.individual_id = 'here I would like to use the results of a another select' これSELECTは単純に他の種類です: SELECT identifier FROM another_table WHERE something='something' 以下は、さまざまなitem_typesに対して何度も拒否された単純化されたテーブルレイアウトです...(3つのまったく異なるタイプ、したがって最適化された場合は3つのSQLクエリ)。 table passage id_passage PK business_field_passage bytea table item id_item PK id_passage FK business_field_item …

2
SQL Serverは、2つの同等にパーティション分割されたテーブルでの並列マージ結合を最適化しません
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 7年前に移行され ました。 非常に詳細な質問をおApびします。問題を再現するための完全なデータセットを生成するクエリを含め、32コアマシンでSQL Server 2012を実行しています。ただし、これはSQL Server 2012に固有のものではないと思い、この特定の例ではMAXDOPを10に強制しました。 同じパーティション構成を使用してパーティション化された2つのテーブルがあります。パーティショニングに使用される列でそれらを結合すると、SQL Serverは予想されるほど並列マージ結合を最適化できないため、代わりにHASH JOINを使用することにしました。この特定のケースでは、パーティション関数に基づいてクエリを10個の独立した範囲に分割し、SSMSでそれらのクエリを同時に実行することにより、はるかに最適な並列MERGE JOINを手動でシミュレートできます。WAITFORを使用してすべてを正確に同時に実行すると、すべてのクエリが、元の並列HASH JOINで使用された合計時間の約40%で完了します。 同等にパーティション化されたテーブルの場合に、SQL Serverがこの最適化を独自に行う方法はありますか?SQL Serverは一般にMERGE JOINを並列化するために多くのオーバーヘッドが発生する可能性があることを理解していますが、この場合、オーバーヘッドが最小限の非常に自然なシャーディングメソッドがあるようです。おそらく、オプティマイザーがまだ十分に認識できないほど特殊なケースでしょうか? この問題を再現するために、単純化されたデータセットを設定するSQLは次のとおりです。 /* Create the first test data table */ CREATE TABLE test_transaction_properties ( transactionID INT NOT NULL IDENTITY(1,1) , prop1 INT NULL , prop2 FLOAT NULL ) /* Populate table with …

3
左外部結合にデフォルトを提供できますか?
テーブルa(列a1)およびb(列b1およびb2)があり、左外部結合を実行するとします。 SELECT * FROM a LEFT OUTER JOIN b ON a.a1 = b.b1 b1とb2は、a1の値に一致するb1の値がない場合、NULLになります。 NULLの代わりにb2のデフォルト値を提供できますか?私はのでCOALESCEが、ここでは動作しないことに注意していないがどこB2の潜在的なNULLを上書きするデフォルト値をしたいです B1マッチングa1の値が。 つまり、aとbは CREATE TABLE a (a1) AS VALUES (1), (2), (3) ; CREATE TABLE b (b1,b2) AS VALUES (1, 10), (3, null) ; a1 b1 | b2 --- -------- 1 1 | 10 2 3 …
21 postgresql  join 

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