問題タブ [actian]
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.
sql - 左結合とフィルタを使用したこの選択クエリで何が間違っていますか?
Actian PSQL v13 の場合:
2 つのテーブルを結合し、いくつかの条件で結果セットをフィルター処理しようとしています。1 つのテーブルは顧客の販売履歴です。もう 1 つのテーブルは、顧客を購入グループに関連付けます。すべての顧客が購入グループに属しているわけではないため、考えられるすべての販売履歴結果を取得するために左結合を実行しています。結果に購入グループ「SALREP」の誰かを含めたくありませんが、どの購入グループにも属さない顧客を表示したいと考えています。また、いわゆるパーツ「FREIGHT」は結果から除外されています。
私が抱えている問題は、グループ「SALREP」を除外すると、購入グループに含まれる顧客のみが選択されることです。購買グループに属さないすべての顧客が欠落しています。
「SALREP」のフィルターをコメントアウトしてこれをテストしたところ、結果セットには実際に購入グループに属していない顧客が含まれています。また、Actian PSQL がうるさい場合に備えて、別のフィルター アプローチを使用してみました。たとえば、!=
、not()
、<>
;など、さまざまな「等しくない」方法を試しました。問題は解決しません。また、同じ問題でleft join
andを使用しました。left outer join
クエリは次のとおりです。
予想される結果セットには、2019 年 6 月 13 日以降に請求されたものはすべて含まれ、「FREIGHT」と呼ばれる部分は含まれず、「SALREP」と呼ばれるグループに顧客が含まれていません。ただし、実際の結果セットは不完全です。例えば:
基本的に、どの購買グループにも属さない顧客はすべて除外されます。
その部分をコメントアウトするand T2.GROUP_CUST != 'SALREP'
と、期待される結果が見つかります。例えば:
そもそも購入グループから「SALREP」を削除する選択クエリへの左結合を作成することを考えていましたが、結果セットでそのグループから誰かを識別して削除することはできません。元。:left join (select * from BUYING_GROUP where GROUP_CUST != 'SALREP') T2
8/7/19 さらなる試み: MySQL v5.0.12 でも同じジレンマを見つけています。テーブルを結合したままにしておくと、一致しない結果が得られます。予想外に何も失うことなく、これらの不一致の結果で左側のテーブルをフィルター処理できます。それでも、不一致の行をすべて消去せずに、これらの不一致の結果で正しいテーブルをフィルター処理することはできません。