当连接每个记录有两个条目的表时,如何在Teradata SQL中返回不同的记录?

时间:2013-03-18 13:50:19

标签: sql join teradata

标题有点令人满意,但基本上我有两个表,一个包含事件数据,例如incident_data,其中包含事件ID,日期,时间和其他结构化字段。另一个incident_text包含说明,分辨率和其他自由格式文本字段。

我想在incident_text中搜索说明和解析字段,并与incident_data一起加入,以获取更多详细信息。它们由incidentno加入,每个事件在incident_text中都有两个条目,一个用于描述,另一个用于解析。

说这是我的问题:

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 个答案:

答案 0 :(得分: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

(未经测试,请核实)
- 一个注意事项 - 您不使用UPPER()(或LOWER()或类似的);你确定正在使用那个套管吗? 这也是WHERE子句条件无法移动到INNER JOIN的时间之一,因为即使描述不包含搜索文本,我们也需要行。