問題タブ [left-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 に答える
1698 参照

mysql - Bで一致しないAのエントリを見つけるための効率的なMySQLクエリ

いくつかのテーブル(製品とサプライヤー)があり、どのアイテムがサプライヤーテーブルにリストされなくなったかを調べたいと思います。

テーブルuc_productsには製品があります。テーブルuc_supplier_csvには、サプライヤ在庫があります。uc_products.modelはuc_suppliers.skuに対して結合します。

サプライヤテーブルで参照されていない製品テーブルの在庫を特定しようとすると、非常に長いクエリが表示されます。一致するエントリのnidのみを抽出したい。sid IS NULLは、サプライヤがないアイテムを特定できるようにするためのものです。

以下の最初のクエリでは、結果(507行)を取得するのにDBサーバー(4GB RAM / 2x 2.4GHz Intel)に1時間かかります。2番目のクエリが終了するのを待ちませんでした。

このクエリをより最適にするにはどうすればよいですか?文字セットの不一致が原因ですか?

私は、次のSQLを使用するのが最も効率的だと考えていました。

このクエリでは、次のEXPLAIN結果が得られます。

ここでは、キーidx_skuとidx_modelが有効であると思っていましたが、そうではありません。これは、テーブルのデフォルトの文字セットが一致しないためですか?1つはUTF-8で、もう1つはlatin1です。

私もこのフォームを検討しました:

EXPLAINは、そのクエリに対して次の結果を表示します。

そして、私は何も見逃さないように、ここにいくつかのよりエキサイティングな詳細があります:テーブルのサイズと統計、そしてテーブルの構造:)

編集:以下のMartinからのいくつかの提案されたクエリのクエリプランを追加します:

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

select - JID が table2 になく、table2.uid も 11111 でない table1 から * を選択します。

列 JID を含むテーブル 1 からすべてを選択したいと考えています。これらは、プレイヤーが学習できる利用可能なものです。しかし、プレイヤーがすでに学んだことのリストを持つ table2 があります。したがって、JID がテーブル 2 にある場合、それは学習済みであり、テーブル 1 から選択する必要はありません。

たとえば。

表 1 JID タイトル 説明 ランク

表 2 JID ユーザー ID 値 1 値 2

テーブル 1 には 100 行あるかもしれませんが、テーブル 2 にテーブル 1 の JID の一部を含む 9 行がある場合、それらを選択したくありません。さらに、それはテーブル 2 のユーザー ID に固有です。そのため、table2 を JID でフィルタリングする必要があります。

これが理にかなっていることを願っています。サブクエリは必要ありません。JID で左外部結合を使用することは可能だと思いますが、USERID を組み込む方法がわかりません... ヘルプ!

ps UIDが一致しない場合、JIDはtable1とtable2にある可能性があります...一致する場合、選択するJIDがtable2に見つかりません。

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

sql - MySQL: LEFT JOIN .. テーブル 2 にない場合でも、テーブル 1 からすべてを選択しますか?

選択のためにいくつかのテーブルを結合しています

2 番目、3 番目、4 番目のテーブルに一致するものがない場合でも、最初のテーブルに一致がある限り結果を取得したいと考えています。私は LEFT JOIN がこれをしたと思ったが、そうではない。

完全なクエリは次のとおりです。

316の結果を引き出します

結合なしのクエリは次のとおりです。

362の結果を引き出します

JOIN qry のWHERE prod_drop.prod_drop_name = "Carat Weight"句のために、これが起こっている予感があります。しかし、上記のクエリで必要なものを取得する方法はありますが、他のテーブルに何も一致しない場合でも、最初 (一番左、cart_product) テーブルからすべてを取得しますか?

ありがとう!!

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

php - 複数のモデルにまたがる条件ステートメントの作成 (CakePHP 1.2.5)

ユーザー、地域、国という 3 つのモデルがあるとします。

これらの各モデルは、Containable 動作を使用しています。コードが「US」の国のユーザーを検索しようとしています。これが私が試みていることです:

CakePHP はこれを 2 つのクエリに分けています。

  1. まず、コードが「US」のすべての国の ID を選択しています。
  2. region.country_id次に、それらの ID を使用して、以前に取得した国 ID のリストに含まれるすべてのユーザーの JOINing 地域を選択します。

その結果、私のconditions配列には Country.code への参照が含まれており、Cake が構築する 2 番目のクエリは国を結合しないため、アプリで SQL エラーが発生します。

Cake の最善の解決策は、マニュアルの複雑な検索条件の部分で説明されているように、サブクエリを作成することです。ただし、これは非常に複雑なようで、私が実装したいというよりもハックです。私が見落としている簡単な方法はありますか?

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

java - SQLQueryで@JoinTableを使用して結合を取得する

次のように、結合テーブルを介してマップされるプロパティ「latestHistory」を持つマップされたエンティティがあります。

myRecord.getLatestHistory()を呼び出すと、マッピングは正しく機能します。

レコードのバッチを返し、結合テーブルを使用して各レコードの履歴を結合する複雑なネイティブSQLクエリがあります。クエリからレコードエンティティを返し、結果に履歴オブジェクトを入力したいと思います。私の試みは次のようになります:

これを行うと、次のようなクエリが生成されます。

選択リストを台無しにすることなく、正しく参加して関連付けを取得するにはどうすればよいですか?

[更新:私が試したアプローチのいくつか:

左端(ルート)のエンティティがaddEntityを使用して追加されている限り、addEntity(...)とaddJoin(...)のどちらを使用しても大きな違いはないようです。

]

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

sql - GROUP_CONCAT および LEFT_JOIN の問題 - すべての行が返されない

私のDBスキームが次のようになっているとしましょう:

最初のクエリを実行して、すべての製品とそのユーザー (存在する場合) を取得すると、次のようになります。

は、私にはよく見えますよ。ここで、同じことをしたい場合は、連結されたユーザー名 (ユーザーがいる場合、そうでない場合は NULL) を使用して、行ごとに 1 つの製品を持ちたい場合を除きます。

製品のユーザーがいない場合、 GROUP_CONCAT は、LEFT JOINがあっても、mysql がこの製品の行を生成するのを防ぎます。

  1. これは予想される MySQL の動作ですか?
  2. GROUP_CONCAT または別の関数を使用して期待される出力を得る方法はありますか?
0 投票する
3 に答える
924 参照

php - PHPからのMYSQL結合値の取得

同じ列名で値を保持するテーブルが2つ以上あります。これらの2つのテーブルを結合すると、列名は同じままになります。PHP($ row ['name'])でこれらの値を取得すると、列' name'が2回使用されるため、問題が発生します。

クエリ内でこれら2つの列を分離するための可能な手段はありますか?

テーブルストーリー ID、名前、コンテンツ、日付

テーブル作成 者ID、名前、日付

これら2つを結合すると、同様の「名前」列を持つ1つのテーブルが得られます。

とにかく2つのテーブルを分離して、作成者テーブルの前にプレフィックスを付けることはできますか?例:authors_name / authors_ *

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

linq-to-sql - 結合に関連付けられたレコードを持たないレコードのリストを返す LINQ クエリ

結果セットが関連付けられたレコードを持たないレコードであるクエリを返す最も効率的な方法は何ですか? 私は LINQ と Visual Basic を使用しており、左外部結合を作成してから、関連付けられたテーブルで ID が何もないか null であるレコードをフィルター処理しようとしていますが、これは非常に新しいため、何も動作しません。

次のようなことをしたい:

左のテーブル全体からこの結果セットを差し引いたものを返したいのですが、本当の初心者であり、立ち往生しています。

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

sql - 左結合を実行すると、内部で何が起こっていますか?

SQL の左結合について質問があります。SQL サーバーが左結合を実行する方法を知りたいのですが?

2 つのテーブルがあるとします。

  • ID
  • 名前

電話

  • ID
  • person_id
  • 電話

私が実行すると:

...SQL サーバーがクエリ文字列をどのように処理するか知りたいです。

私の推測は次のとおりです。

  1. 人物の行をすべて選択する
  2. 条件付きで電話行の照合を開始します。この場合、people.id = phone_person_id です。
  3. 結合されたままになっているため、見つからない場合は「電話」の値を null として表示します。

私は正しいですか??

また、この種の情報を得るにはどのような本を読めばよいでしょうか?

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

mysql - MySQL:条件付きで LEFT JOIN する方法はありますか? (または類似?)

テーブル内のすべての製品と、テーブル内のそのアイテムのレコードが存在する場合のproducts各製品の販売価格を取得するクエリを作成しています。specials

私が探しているのは次のようなものです:

MySQL はプログラミング言語ではないことは承知していますが、上記と論理的に同等の結果になるクエリを作成する方法はありますか?

結果セットは次のようになります。