[英]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.