1


あなたが助けてくれることを願っています。3 つのテーブルがあり、条件付きクエリを作成して 1 つのテーブル内の行の存在に基づいてサブセットを作成し、その行を結果から除外してから、最終的な 3 番目のテーブルをクエリしたいと考えています。これは十分に簡単だと思いましたが、SQL の経験が十分ではなく、左結合、相関サブクエリなどで 6 時間調査/テストした後、それは役に立ちましたが、まだ正しい結果セットをヒットできません。 . セットアップは次のとおりです。

T1
arn_mkt_stn
a00001_177_john_fm
a00001_177_bill_fm
a00001_174_dave_fm a00002_177_john_fm
a00006_177_bill_fmfm
a00010_1777_j7_john_3 -fig fig the fig the fig the fig fig fig
fimfm

T2
arn_mkt
A00001_105
A00001_177
A00001_188
A00001_246
A00002_177
A00003_177
A00004_026
A00004_135
A00004_177
A00006_177
A00010_177


Example: So if _177_JOHN_FM is a substring of arn_mkt_stn rows in T1, exclude it when getting arn_mkts with a substring of 177 from T2 - in this case, the desired result set would be :
A00003_177
A00004_177
A00006_177

同様に、_177_BILL_FM は次を返します: A00002_177 A00003_177
A00004_177
A00010_177
次に



この結果セットを使用して、「A00003」などに基づいて 3 番目のテーブルからレコード を 取得 し たい と 思い ます 。メソッド の _ stn_code' AND SUBSTRING(arn_mkt, 8,3) = '$stn_mkt' (次に、この結果を使用して T3 をクエリします..)














また、左結合とサブクエリですが、明らかに何かが欠けています! 感謝して受け取ったポインタ、ありがとう、

リッチ。

[編集: sgeddes を助けてくれてありがとう。上記のロジックを拡張します...最初に、必要な結果セットは常にクエリごとに 1 つの名前のみに関連付けられています。たとえば、T1 から JOHN_FM を使用できます。T1 では、JOHN_FM は現在「arn's (arn_mkt_stn 内): A00001、A00002 & A00010」に関連付けられています。T2 の次のステップは、JOHN_FM の 3 桁のプレフィックス (177) を持つすべての「arn (arn_mkt 内)」を検索し、T1 にあるものを除外することです。注: T1 で JOHN_FM に接続されていないため、A00006 が残ります。BILL_FM の同じクエリでは、T1 にこの関連付けがあるため、A00001 と A00006 を除いて、わずかに異なる結果が得られます.. ありがとう、R]

4

1 に答える 1

1

を使用しLEFT JOINて、T1のレコードと一致するレコードをT2から削除できます。しかし、私はあなたの論理を理解しているのかわかりません。

あなたA00001_177_JOHN_FMは戻るべきだと言います:

A00003_177
A00004_177
A00006_177

しかし、上記の結果からA00006_177_BILL_FM除外しませんか?A00006_177

私があなたを正しく理解しているなら、このクエリはあなたが探しているものに近いはずです(あなたがどのフィールドを返す必要があるか完全にはわかりませんでした):

SELECT T2.arn_mkt, T3.arn
FROM T2 
  LEFT JOIN T1 ON
    T1.arn_mkt_stn LIKE CONCAT(T2.arn_mkt,'%')
  INNER JOIN T3 ON
    T2.arn_mkt LIKE CONCAT(T3.arn,'%')
WHERE T1.arn_mkt_stn IS NULL

サンプルフィドルデモ

- 編集 -

コメントを確認すると、これはあなたが探しているものでなければなりません:

SELECT *
FROM T2 
  LEFT JOIN T1 ON
    T1.arn_mkt_stn LIKE CONCAT(LEFT(T2.arn_mkt,LOCATE('_',T2.arn_mkt)),'%') AND T1.arn_mkt_stn LIKE '%JOHN_FM'
  INNER JOIN T3 ON
    T2.arn_mkt LIKE CONCAT(T3.arn,'%')
WHERE T1.arn_mkt_stn IS NULL 

そして、これが更新されたフィドルです:http ://sqlfiddle.com/#!2/3c293/13

于 2013-02-22T14:13:34.510 に答える