[MDEV-13994] Bad join results with orderby_uses_equalities=on Created: 2017-10-04  Updated: 2020-07-09  Resolved: 2017-11-11

Status: Closed
Project: MariaDB Server
Component/s: Data Manipulation - Subquery, Optimizer
Affects Version/s: 10.2.5, 10.2.7, 10.2.9, 10.3.1
Fix Version/s: 10.2.11

Type: Bug Priority: Critical
Reporter: Jan Willem Assignee: Igor Babaev
Resolution: Fixed Votes: 0
Labels: None
Environment:

Official mariadb docker versions


Attachments: File reproduce.sh     File script.sql    
Issue Links:
Duplicate
duplicates MDEV-13390 Identity server Db Select Statement o... Closed
duplicates MDEV-13704 Nested query does not give same resul... Closed
is duplicated by MDEV-14071 Wildly wrong result from subquery in ... Closed
Relates
relates to MDEV-13390 Identity server Db Select Statement o... Closed
Sprint: 10.2.11

 Description   

CREATE TABLE `books` (
`id` int(16) NOT NULL AUTO_INCREMENT,
`library_id` int(16) NOT NULL DEFAULT 0,
`wings_id` int(12) NOT NULL DEFAULT 0,
`scheduled_for_removal` int(1) DEFAULT 0,
PRIMARY KEY (`id`),
KEY `library_idx` (`library_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO `books` VALUES (32625,8663,707,0),(32624,8663,505,1);

CREATE TABLE `wings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`department_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO `wings` VALUES (505,11745),(707,11768);

SELECT wings.id as wing_id, wings.department_id FROM wings WHERE wings.id IN ( SELECT books.wings_id FROM books WHERE books.library_id = 8663 AND books.scheduled_for_removal=0 ) ORDER BY wings.id;

The result should be (707, 11768), but it results in (505, 11745).

Changing the engine for the books table to InnoDB, resolves the problem. Removing the library_idx on books also resolves the problem.

I also tested on mysql 5.5.57, 5.6.37, 5.7.19, and mariadb 5.5.57, 10.0.32 and 10.1.28, where the problem does not occur.

I've added `script.sql` containing the sql from above, and a wrapper script `reproduce.sh` to set up a docker environment for testing.



 Comments   
Comment by Elena Stepanova [ 2017-10-08 ]

Thanks for the report and test case. For a workaround, try setting optimizer_switch='orderby_uses_equalities=off'.

Same test case as in script.sql, suitable for MTR:

--source include/have_innodb.inc
 
CREATE TABLE `books` (
  `id` int(16) NOT NULL AUTO_INCREMENT,
  `library_id` int(16) NOT NULL DEFAULT 0,
  `wings_id` int(12) NOT NULL DEFAULT 0,
  `scheduled_for_removal` int(1) DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `library_idx` (`library_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
 
INSERT INTO `books` VALUES (32625,8663,707,0),(32624,8663,505,1);
 
CREATE TABLE `wings` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `department_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
INSERT INTO `wings` VALUES (505,11745),(707,11768);
 
SELECT wings.id as wing_id, wings.department_id FROM wings WHERE wings.id IN ( SELECT books.wings_id FROM books  WHERE books.library_id = 8663 AND books.scheduled_for_removal=0 ) ORDER BY wings.id;
 
DROP TABLE books, wings;

Actual result (10.2)

+---------+---------------+
| wing_id | department_id |
+---------+---------------+
|     505 |         11745 |
+---------+---------------+

Expected result

+---------+---------------+
| wing_id | department_id |
+---------+---------------+
|     707 |         11768 |
+---------+---------------+
1 row in set (0.00 sec)

Comment by Sergei Petrunia [ 2017-11-08 ]

MDEV-13390 and MDEV-13994 look similar.

Comment by Igor Babaev [ 2017-11-11 ]

A fix for this bug was pushed into 10.2.

Generated at Thu Feb 08 08:10:05 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.