問題タブ [semi-join]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
803 参照

sql - SQL サブクエリで複数のテーブルを使用した Oracle 準結合

この質問は、サブクエリで複数のテーブルを使用するセミ結合に関する明らかなオラクルの制限を回避する方法です。次の 2 つの UPDATE ステートメントがあります。

更新 1:

実行計画は、これが 2 つの準結合を正しく実行し、更新が数秒で実行されることを示しています。は と とは異なり、 ではc.id2一意の外部キーではないため、これらは半結合である必要があります。また、配列であるため、制約はまったくありません。b.id2b.ida.idupdate_in

更新 2:

これは準結合を行いません。EXISTS サブクエリに 2 つのテーブルが含まれているため、Oracle のドキュメントに基づいていると思います。テーブルのサイズとパーティショニングのため、この更新には数時間かかります。ただし、d.time関連付けられているd.start_timeと関連付ける方法d.end_timeは、同じ行にある以外にありません。ここで配列を渡してupdate_in結合する理由は、time/start_time/end_time の組み合わせごとにこのクエリをループで実行すると、パフォーマンスが低下することが判明したためです。

セミ結合が機能しない可能性がある 2 つのテーブル以外の理由はありますか? そうでない場合、この制限を回避する方法はありますか? サブクエリに2つのテーブルを入れなくてもこれらの基準を機能させることができる、私が見逃しているいくつかの簡単な解決策はありますか?

0 投票する
2 に答える
1953 参照

apache-spark - (PySparkで)2つのSpark RDDでセミ結合を行う正しい方法は何ですか?

私の PySpark アプリケーションには、次の 2 つの RDD があります。

  • items - すべての有効なアイテムのアイテム ID とアイテム名が含まれます。約100000アイテム。

  • attributeTable - これには、フィールド ユーザー ID、アイテム ID、およびこの組み合わせの属性値がこの順序で含まれます。これらは、システム内のユーザーとアイテムの組み合わせごとに特定の属性です。このRDDには、数百から数千の行があります。

item RDD の有効なアイテム ID (または名前) に対応しない attributeTable RDD のすべての行を破棄したいと考えています。つまり、アイテム ID による半結合です。たとえば、これらが R データ フレームの場合、semi_join(attributeTable, items, by="itemID") を実行します。

最初に次のアプローチを試しましたが、これが戻るまでに永遠に時間がかかることがわかりました (PC 上の VM で実行されているローカルの Spark インストールで)。膨大な数の比較が含まれているため、当然のことです。

少しいじった後、次のアプローチがかなり高速に機能することがわかりました(私のシステムでは1分程度)。

これは私のアプリケーションでは十分に機能しますが、より汚い回避策のように感じられ、Spark でこれを行うための別のよりクリーンな、または慣用的に正しい (そしておそらくより効率的な) 方法が必要であると確信しています。何を提案しますか?私は Python と Spark の両方に慣れていないので、適切なリソースを教えていただければ、RTFM に関するアドバイスも役に立ちます。

私の Spark バージョンは 1.3.1 です。

0 投票する
1 に答える
704 参照

mysql - グループ化なしのMySQLの複雑な半結合

概要

多数の顧客を選択し、他のテーブルから最新のデータを結合する半結合 (っぽい) クエリを探しています。

後で、クエリの最後に条件を直接追加したいと思います。WHERE c.id IN (1,2,3)

問題

私の知る限り、私の要件は次のことを除外していますGROUP BY

ほとんどのサブクエリ ベースの試行では、私の問題は同じです。

追加の課題として、セミ結合を厳密に使用することはできません。これは、同じテーブルからの少なくとも 2 種類の電話番号 (携帯電話と固定電話) を許可するためです。そのため、電話番号テーブルから、顧客ごとに複数のレコードを結合している可能性があります。つまり、これは準結合ではありません。以下の私の現在の解決策はこれを示しています。

質問

  • 一番下のEXPLAIN結果は、私にはパフォーマンスが良いように見えます。私は正しいですか?各サブクエリは 1 回だけ実行されますか? 更新:DEPENDENT SUBQUERYは、外側のクエリの行ごとに 1 回実行されるようです。これを回避できれば最高です。
  • 私がやっていることに対するより良い解決策はありますか?

DDL

これまでの解決策

フィドル

このフィドルは、指定されたソリューションを使用して適切な結果セットを提供します。上記の私の質問を参照してください。

http://sqlfiddle.com/#!9/98c57/3

0 投票する
2 に答える
267 参照

r - R では semi_join しますが、重複を引き戻します

dplyr の semi_join に問題があります。理想的には、dfB に対して dfA で準結合を行いたいと考えています。dfA には重複した値があり、dfB にも重複があります。dfA で重複していても、dfB と一致するすべての値を dfA から取得したいと考えています。

私が取得したいのは、上記の dfC 出力です。x の一致が少なくとも 1 つあるため、dfA のすべての x が引き戻されます。

どちらも私に正しい結果を与えません。どんな助けでも素晴らしいでしょう!前もって感謝します

0 投票する
3 に答える
49912 参照

sql - データベースの準結合とは何ですか?

準結合の概念と従来の結合との違いを理解するのに苦労しています。すでにいくつかの記事を試しましたが、説明に満足できませんでした。誰かがそれを理解するのを手伝ってくれませんか?