繁体   English   中英

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

[英]How do I return distinct records in Teradata SQL when joining tables that have two entries per record?

标题有点冗长,但实际上我有两个表,其中一个包含事件数据,例如, 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'我将不再重复,但我也将停止搜索分辨率字段,而我仍然希望这样做。

我要查找的是每个事件一行,包含事件的描述,同时在描述和解决方案字段中进行搜索。

您非常接近-大部分原因在于告诉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 ,因为即使描述中不包含搜索文本,我们也需要行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM