1

タイトルは少し長すぎますが、基本的には 2 つのテーブルがあり、1 つはインシデント データincident_dataを含み、インシデント ID、日付、時刻、その他の構造化フィールドなどを含みます。もう 1 つのincident_textフィールドには、説明、解決策、およびその他の自由形式のテキスト フィールドが含まれています。

説明フィールドと解決フィールドの両方を検索し、incident_textそれを結合してincident_data詳細を取得したいと考えています。それらは によって結合されincidentno、各インシデントは に 2 つのエントリincident_text(1 つは説明用、もう 1 つは解決用) を持つことができます。

これが私のクエリだとしましょう:

SELECT    
DISTINCT INCIDENTNO as "Incident Number",
SOME_OTHER_FIELDS ETC..,
TEXTFIELD AS "Text"
TEXTFIELDTYPE AS "Text Type"

FROM INCIDENT_DATA
INNER JOIN INCIDENT_TEXT
ON INCIDENT_DATA.INCIDENTNO=INCIDENT_TEXT.INCIDENTNO

WHERE TEXT LIKE ANY ('%THIS THING%', '%THAT THING%')

使用しているにもかかわらず、そのようなテーブルが表示されますDISTINCT

INCIDENT-1 ... FORGOT MY PASSWORD TO THIS THING ... DESCRIPTION
INCIDENT-1 ... PASSWORD RESET TO THAT THING.... RESOLUTION

追加するAND TEXTFIELDTYPE = 'DESCRIPTION'と、重複はなくなりますが、解像度フィールドの検索も停止します。これは引き続き行いたいと思います。

私が探しているのは、説明フィールドと解決フィールドの両方を検索しながら、インシデントの説明を含むインシデントごとに 1 行です。

4

1 に答える 1

1

あなたはかなり近いです-ほとんどの場合、説明行と解決行を別々に扱うようにSQLに指示することになります。

SELECT Incident_Data.incidentNo as "Incident Number",
       some_other_fields etc..,
       d.textField AS "Text", d.textFieldType AS "Text Type"
FROM Incident_Data
INNER JOIN Incident_Text d
        ON d.incidentNo = Incident_Data.incidentNo
           AND d.textFieldType = 'Description'
LEFT JOIN Incident_Text r
       ON r.incidentNo = Incident_Data.incidentNo
          AND r.textFieldType = 'Resolution'
          AND r.textField LIKE ANY ('%THIS THING%', '%THAT THING%')
WHERE d.textField LIKE ANY ('%THIS THING%', '%THAT THING%')
      OR r.incidentNo IS NOT NULL

(テストされていません。確認してください) - 1 つの注意事項 - (または類似の)
は使用しません。そのケーシングが使用されていることは確かですか? これは、説明に検索テキストが含まれていなくても行が必要なため、句条件を に移動できない場合の 1 つでもあります。UPPER()LOWER()
WHEREINNER JOIN

于 2013-03-18T16:12:08.720 に答える