[teiid-issues] [JBoss JIRA] (TEIID-4619) left join returns wrong results

Steven Hawkins (JIRA) issues at jboss.org
Thu Dec 22 16:01:00 EST 2016


    [ https://issues.jboss.org/browse/TEIID-4619?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13341712#comment-13341712 ] 

Steven Hawkins commented on TEIID-4619:
---------------------------------------

A quick investigation would be to turn off order by support on the cosara2 to see if that has an effect.  There's more logic to prevent that type of issue in 9.1 with TEIID-4129

In more detail, based upon query1 where you are seeing an appropriate number of outer rows, but the inner side of the left outer join is not populated we should validate that the inner side is returning the expected data.  The source query is:

SELECT g_0.culturenumber AS c_0, g_0.specimennumber AS c_1, g_0.sampleinsertts AS c_2, g_0.culturename AS c_3, g_0.quotation AS c_4 FROM cosara2.cos2_lab_culture AS g_0 ORDER BY c_1, c_0, c_2

If you run that directly against the source does that query contain return the lab culture entries you expect, and is the ordering (based upon the string field specimennumber) compatible with UCS-2 / ASCII ordering?

> left join returns wrong results
> -------------------------------
>
>                 Key: TEIID-4619
>                 URL: https://issues.jboss.org/browse/TEIID-4619
>             Project: Teiid
>          Issue Type: Bug
>    Affects Versions: 9.0.4, 9.0.5
>            Reporter: Bram Gadeyne
>            Assignee: Steven Hawkins
>            Priority: Critical
>         Attachments: correct_result.txt, enclosed_queryplan.txt, query1_enclosed_plan.txt, query1_plan.txt, query2_plan.txt, teiid_reduced_case.txt, wrong_result.txt
>
>
> I have the following situation.
> I have a temporary table #tmp_admissions that contains 8047 rows. 
> In this first query there are 66290 results. However if I only look at the lines for infectionid 880 then there are only 16 lines.
> {code:sql}
> select l.infectionid, l.id as linkid, lc.linkcultureid, lc.responsibleculture, lc.culturealternative, cl.sampleinsertts, cl.specimennumber, 
> 				cl.culturenumber, cl.culturename, cl.quotation, ls.material, ls.sampletime,
> 				abr.culturenumber as abgram_culturenumber,abr.antibiogrampart, abr.resisttype, 
> 				lc.antibiogramculturenr,lc.antibiogramspecimennr,lc.antibiogramsampleinsertts
> 			from #tmp_admissions adm
> 			join cos2_links l on l.admissionid = cast(adm.patientid as string)
> 			join cos2_link_culture lc on lc.linkid = l.id
> 			left join cos2_lab_culture cl on cl.culturenumber = lc.culturenr and cl.specimennumber = lc.culturespecimennr and cl.sampleinsertts = lc.culturesampleinsertts
> 			left join cos2_lab_sample ls on ls.inserttime = cl.sampleinsertts and ls.specimennumber = cl.specimennumber
> 			left join cos2_antibiogramresistences abr on abr.specimennumber = cl.specimennumber and abr.culturenumber = cl.culturenumber and abr.sampleinsertts = cl.sampleinsertts
> {code}
> This query does almost the same but returns 30 rows (and is correct).
> {code:sql}
> select  l.infectionid, l.id as linkid, lc.linkcultureid, lc.responsibleculture, lc.culturealternative, cl.sampleinsertts, cl.specimennumber, 
> 				cl.culturenumber, cl.culturename, cl.quotation, ls.material, ls.sampletime,
> 				abr.culturenumber as abgram_culturenumber,abr.antibiogrampart, abr.resisttype, 
> 				lc.antibiogramculturenr,lc.antibiogramspecimennr,lc.antibiogramsampleinsertts
> from cos2_links l
> join cos2_link_culture lc on lc.linkid = l.id
> left join cos2_lab_culture cl on cl.culturenumber = lc.culturenr and cl.specimennumber = lc.culturespecimennr and cl.sampleinsertts = lc.culturesampleinsertts
> left join cos2_lab_sample ls on ls.inserttime = cl.sampleinsertts and ls.specimennumber = cl.specimennumber
> left join cos2_antibiogramresistences abr on abr.specimennumber = cl.specimennumber and abr.culturenumber = cl.culturenumber and abr.sampleinsertts = cl.sampleinsertts
> where l.infectionid = 880
> {code}
> cos2_link_culture contains 2 rows for this infectionid. The left join statements should result in 15 rows for both rows. However the left join results in the first query for the first row are null and to my understanding ignored. I'll attach the query plans for both queries.
> I should note that there is a one to many relation between infection and admission so therefore infectionid is for the same admission.
> Strangely enough if you enclode the first query in a group by query and count the rows it does indeed return 2 times 15 for the specific groups (see enclosed_queryplan.txt).



--
This message was sent by Atlassian JIRA
(v7.2.3#72005)


More information about the teiid-issues mailing list