Uploaded image for project: 'Couchbase Server'
  1. Couchbase Server
  2. MB-21128

[RQG]SELECT * FROM <bucketname> WHERE <fieldname> NOT IN [NULL] gives different results

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 5.0.0
    • 4.6.0
    • query
    •  4.6.0-3290
    • Untriaged
    • Yes

    Description

      sql Query issued:
      SELECT * FROM  simple_table_2  t_1     WHERE      ( int_field1  NOT IN     (SELECT  MIN(int_field1) AS int_field1 FROM  simple_table_1  t_3     WHERE    t_3.primary_key_id = t_1.primary_key_id   AND   ( (((t_3.bool_field1 = false OR t_3.decimal_field1 >= 4925)) AND ((t_3.bool_field1 AND t_3.decimal_field1 > 4925))) AND ((((t_3.bool_field1 != false OR t_3.int_field1 != 5000)) AND ((t_3.bool_field1 != true AND t_3.int_field1 BETWEEN 15 and 9999)) OR ((t_3.primary_key_id IS NOT NULL AND t_3.decimal_field1 > 4925)) AND ((t_3.int_field1 >= 5000 AND t_3.char_field1 = "N" AND NOT (t_3.bool_field1)))) AND ((NOT (t_3.bool_field1) OR t_3.decimal_field1 IS NULL))) ) )    ) ;
       
      Result is empty set
       
      N1QL query issued:
      SELECT * FROM  multiple_table_db_7233_simple_table_2  t_1    WHERE     int_field1  NOT IN       (SELECT RAW MIN(int_field1) AS int_field1 FROM  multiple_table_db_7233_simple_table_1  t_3 
      WHERE     (((t_3.bool_field1 = false OR t_3.decimal_field1 >= 4925)) AND ((t_3.bool_field1 AND t_3.decimal_field1 > 4925))) AND ((((t_3.bool_field1 != false OR t_3.int_field1 != 5000)) AND ((t_3.bool_field1 != true AND t_3.int_field1 BETWEEN 15 and 9999)) OR ((t_3.primary_key_id IS NOT NULL AND t_3.decimal_field1 > 4925)) AND ((t_3.int_field1 >= 5000 AND t_3.char_field1 = "N" AND NOT (t_3.bool_field1)))) AND ((NOT (t_3.bool_field1) OR t_3.decimal_field1 IS NULL)))   ) 
       
      Result is all 1000 documents.
       
       
      After reducing above subqueries I found the inner subquery:
      SELECT RAW MIN(int_field1) AS int_field1 FROM  multiple_table_db_7233_simple_table_1  t_3 
      WHERE     (((t_3.bool_field1 = false OR t_3.decimal_field1 >= 4925)) AND ((t_3.bool_field1 AND t_3.decimal_field1 > 4925))) AND ((((t_3.bool_field1 != false OR t_3.int_field1 != 5000)) AND ((t_3.bool_field1 != true AND t_3.int_field1 BETWEEN 15 and 9999)) OR ((t_3.primary_key_id IS NOT NULL AND t_3.decimal_field1 > 4925)) AND ((t_3.int_field1 >= 5000 AND t_3.char_field1 = "N" AND NOT (t_3.bool_field1)))) AND ((NOT (t_3.bool_field1) OR t_3.decimal_field1 IS NULL)))           ;
       
      returns null in both sql and n1ql
       
      Hence the difference lies in these queries:
      n1ql query:
      SELECT * FROM  simple_table_2  t_1     WHERE      int_field1  NOT IN [NULL];
       
      sql query:
      SELECT * FROM  simple_table_2  t_1     WHERE      int_field1  NOT IN (NULL);
       
      n1ql query returns all 1000 documents but sql query returns empty dataset.
      
      

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            Prerna.Manaktala Prerna Manaktala (Inactive)
            Prerna.Manaktala Prerna Manaktala (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes

                PagerDuty