0

JOIN 構文の例をたくさん読んだことがありますが、どれも私の問題には当てはまりません。

見積もり表と販売問い合わせ表があります。1回のお見積りで複数のお問い合わせになる場合もあれば、お問い合わせがない場合もあります。すべての見積もりの​​リストを作成し、結果として得られた問い合わせの詳細を含めたいと考えています。多くの問い合わせがあった見積もりに対して複数の結果行が予想されます。問い合わせが発生しなかった見積もりについては、問い合わせフィールドが空または null の単一の行を期待しています。

接続データは見積もりテーブルにあります。ここには、結果として発生した一部またはすべての問い合わせの ID を含む「アクティビティ」と呼ばれるフィールドがあります。新たな問い合わせが入るたびに更新されます。

だから私はこれを試しました:

SELECT q.*, e.id, e.price
FROM quotes as q
LEFT JOIN enquiries as e
ON INSTR(q.activity, e.id) >'0'
WHERE q.date > '2013-07-01'

しかし、結果のすべての行には問い合わせデータが含まれています。何の結果にもならなかった引用符を含めることができないようです。LEFT JOIN は、問い合わせに関係なくすべての引用符を提供し、一致した問い合わせデータを含めることになっていると思いました。しかし、私が見たすべての例は、a.id = b.id で結合しているだけなので、INSTR() 一致基準が混乱している可能性があると思います。

4

2 に答える 2

0

これは私にとってはうまくいくように見えるので、あなたの問題は別の場所にあると思います。問い合わせのリストはカンマ区切りの文字列だと思っていました。http://sqlfiddle.com/#!4/71ce1/1を参照してください

0 を一重引用符で囲みますが、違いはありません。また、デフォルトの日付形式に依存するべきではありませんが、使用TO_DATEしています。使用している DBMS はわかりませんが、Oracle と MySQL の両方を試しました。

于 2014-04-13T19:47:11.177 に答える
0

以前のコメンテーターが示唆していたように、問題は Instr との結合にかかっています。多くの RDBMS の INSTR からの戻り値は整数値です。したがって、INSTR の値を '0' に対してテストしても、一致は得られません。また、Instr が一致するものを見つけられない場合、Null が返される可能性のある MS Access のような何かが返される場合があります。これは明らかにすべて推測であり、これが実際の問題であるかどうかを確認するには、データと問題の例を実際に確認する必要があります. これ以上の情報がない場合、これはあなたが得ようとしている最高のものです:

使用しているDBがわからない場合でも、INSTRのリンクをいくつか含めました。

MySql

オラクル

MS Access (バリアントの Long を返す)

SQL Server - Instr 関数なし - CharIndex

于 2014-04-13T17:33:11.887 に答える