[ https://issues.apache.org/jira/browse/DERBY-2370?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12491606 ]
Dyre Tjeldvoll commented on DERBY-2370: --------------------------------------- I have looked at the writeup and and also looked at the patch. While I am certainly no expert in this area I think the explanation and solution in the writeup looks very sound. The patch seem to implement what is suggested, it is clear, well documented and tested. +1 from me. > EXISTS may return the wrong value for sub-queries involving set operations > -------------------------------------------------------------------------- > > Key: DERBY-2370 > URL: https://issues.apache.org/jira/browse/DERBY-2370 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.2.2.0 > Reporter: Dyre Tjeldvoll > Assigned To: A B > Attachments: d2370_engine_v1.patch, d2370_tests_v1.patch, > d2370_v1.stat, d2370_writeup_v1.html, repro.sql > > > It seems like EXISTS on a SELECT returning zero rows returns false (as > expected), but EXISTS on INTERSECT of two disjunct sets returns true, > e.g EXISTS (values 1 intersect values 2). > Yip Ng wrote on derby-dev: > I believe its probably got to do with the EXISTS subquery transforming > the original RCL to > a TRUE boolean value for the INTERSECT. So during row comparison at > execution time > for INTERSECT processing since true == true(thus intersects), so it > will always return 'BAD'. Likewise, > select * from ( values 'OK' ) as T where exists (values 1 except values 2); > This supposedly should return 'OK' but because of the boolean > transformation mentioned > above for EXISTS subquery, it will return no rows for EXCEPT > processing. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.