Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-3323

LP:609128 - RQG: Wrong result with JOIN + NOT IN + partial_match_table_scan=ON

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Not a Bug
    • None
    • None
    • None

    Description

      The following query:

      SELECT table1 .`col_varchar_key`
      FROM C table1 JOIN C table2 ON table1 .`col_int_nokey`
      WHERE ( table1 .`col_varchar_key` , table2 .`col_varchar_nokey` ) NOT IN (
      SELECT `col_varchar_key` , `col_varchar_nokey`
      FROM BB )

      returns no rows when evaluated using the partial match table scan strategy, whereas there are rows that match the NOT IN condition.

      Test case:

      CREATE TABLE `C` (
      `col_int_nokey` int(11) DEFAULT NULL,
      `col_int_key` int(11) DEFAULT NULL,
      `col_varchar_key` varchar(1) DEFAULT NULL,
      `col_varchar_nokey` varchar(1) DEFAULT NULL,
      KEY `col_int_key` (`col_int_key`),
      KEY `col_varchar_key` (`col_varchar_key`,`col_int_key`)
      );

      INSERT INTO `C` VALUES (NULL,2,'w','w');
      INSERT INTO `C` VALUES (7,9,'m','m');
      INSERT INTO `C` VALUES (9,3,'m','m');
      INSERT INTO `C` VALUES (7,9,'k','k');
      INSERT INTO `C` VALUES (4,NULL,'r','r');
      INSERT INTO `C` VALUES (2,9,'t','t');
      INSERT INTO `C` VALUES (6,3,'j','j');
      INSERT INTO `C` VALUES (8,8,'u','u');
      INSERT INTO `C` VALUES (NULL,8,'h','h');
      INSERT INTO `C` VALUES (5,53,'o','o');
      INSERT INTO `C` VALUES (NULL,0,NULL,NULL);
      INSERT INTO `C` VALUES (6,5,'k','k');
      INSERT INTO `C` VALUES (188,166,'e','e');
      INSERT INTO `C` VALUES (2,3,'n','n');
      INSERT INTO `C` VALUES (1,0,'t','t');
      INSERT INTO `C` VALUES (1,1,'c','c');
      INSERT INTO `C` VALUES (0,9,'m','m');
      INSERT INTO `C` VALUES (9,5,'y','y');
      INSERT INTO `C` VALUES (NULL,6,'f','f');
      INSERT INTO `C` VALUES (4,2,'d','d');

      CREATE TABLE `BB` (
      `col_int_nokey` int(11) DEFAULT NULL,
      `col_int_key` int(11) DEFAULT NULL,
      `col_varchar_key` varchar(1) DEFAULT NULL,
      `col_varchar_nokey` varchar(1) DEFAULT NULL,
      KEY `col_int_key` (`col_int_key`),
      KEY `col_varchar_key` (`col_varchar_key`,`col_int_key`)
      );

      INSERT INTO `BB` VALUES (8,8,NULL,NULL);

      SET @@optimizer_switch='partial_match_rowid_merge=off,partial_match_table_scan=on,subquery_cache=off,semijoin=off';

      SELECT table1 .`col_varchar_key`
      FROM C table1 JOIN C table2 ON table1 .`col_int_nokey`
      WHERE ( table1 .`col_varchar_key` , table2 .`col_varchar_nokey` ) NOT IN (
      SELECT `col_varchar_key` , `col_varchar_nokey`
      FROM BB ) ;

      Attachments

        Activity

          People

            timour Timour Katchaounov (Inactive)
            philipstoev Philip Stoev (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.