SELECT DISTINCT d.customer_id, d.date_added FROM `order` d
WHERE d.customer_id NOT IN (
SELECT DISTINCT i.customer_id
FROM `order` i
WHERE i.date_added > '2015-02-15 14:00:00'
)
ORDER BY d.date_added DESC;
The above query should return customer_id of customers who have not ordered after 15 Feb 2015 (I think). But very first record is
17168, 2015-08-16 17:36:00
What am I doing wrong?
This below query
SELECT DISTINCT i.customer_id,i.date_added FROM `order` i
WHERE i.date_added > '2015-02-15 14:00:00'
ORDER BY i.date_added ASC;
returns expected result i.e. list of customer ids for orders placed after 15 Feb
P.S. customer_id can not be NULL
P.P.S.
mysql> SHOW CREATE TABLE `order`;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| order | CREATE TABLE `order` (
`order_id` int(11) NOT NULL AUTO_INCREMENT,
`invoice_no` int(11) NOT NULL,
`invoice_prefix` varchar(26) NOT NULL,
`store_id` int(11) NOT NULL,
`store_name` varchar(64) NOT NULL,
`store_url` varchar(255) NOT NULL,
`customer_id` int(11) NOT NULL,
`customer_group_id` int(11) NOT NULL,
`firstname` varchar(32) NOT NULL,
`lastname` varchar(32) NOT NULL,
`email` varchar(96) NOT NULL,
`telephone` varchar(32) NOT NULL,
`fax` varchar(32) NOT NULL,
`custom_field` text NOT NULL,
`payment_firstname` varchar(32) NOT NULL,
`payment_lastname` varchar(32) NOT NULL,
`payment_company` varchar(40) NOT NULL,
`payment_address_1` varchar(128) NOT NULL,
`payment_address_2` varchar(128) NOT NULL,
`payment_city` varchar(128) NOT NULL,
`payment_postcode` varchar(10) NOT NULL,
`payment_country` varchar(128) NOT NULL,
`payment_country_id` int(11) NOT NULL,
`payment_zone` varchar(128) NOT NULL,
`payment_zone_id` int(11) NOT NULL,
`payment_address_format` text NOT NULL,
`payment_custom_field` text NOT NULL,
`payment_method` varchar(128) NOT NULL,
`payment_code` varchar(128) NOT NULL,
`shipping_firstname` varchar(32) NOT NULL,
`shipping_lastname` varchar(32) NOT NULL,
`shipping_company` varchar(40) NOT NULL,
`shipping_address_1` varchar(128) NOT NULL,
`shipping_address_2` varchar(128) NOT NULL,
`shipping_city` varchar(128) NOT NULL,
`shipping_postcode` varchar(10) NOT NULL,
`shipping_country` varchar(128) NOT NULL,
`shipping_country_id` int(11) NOT NULL,
`shipping_zone` varchar(128) NOT NULL,
`shipping_zone_id` int(11) NOT NULL,
`shipping_address_format` text NOT NULL,
`shipping_custom_field` text NOT NULL,
`shipping_method` varchar(128) NOT NULL,
`shipping_code` varchar(128) NOT NULL,
`comment` text NOT NULL,
`total` decimal(15,4) NOT NULL DEFAULT '0.0000',
`order_status_id` int(11) NOT NULL,
`affiliate_id` int(11) NOT NULL,
`commission` decimal(15,4) NOT NULL,
`marketing_id` int(11) NOT NULL,
`tracking` varchar(64) NOT NULL,
`language_id` int(11) NOT NULL,
`currency_id` int(11) NOT NULL,
`currency_code` varchar(3) NOT NULL,
`currency_value` decimal(15,8) NOT NULL DEFAULT '1.00000000',
`ip` varchar(40) NOT NULL,
`forwarded_ip` varchar(40) NOT NULL,
`user_agent` varchar(255) NOT NULL,
`accept_language` varchar(255) NOT NULL,
`date_added` datetime NOT NULL,
`date_modified` datetime NOT NULL,
`payment_company_id` varchar(32) NOT NULL,
`payment_tax_id` varchar(32) NOT NULL,
`review_requested` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`order_id`),
KEY `store_id` (`store_id`),
KEY `customer_id` (`customer_id`),
KEY `customer_group_id` (`customer_group_id`),
KEY `payment_country_id` (`payment_country_id`),
KEY `payment_zone_id` (`payment_zone_id`),
KEY `shipping_country_id` (`shipping_country_id`),
KEY `shipping_zone_id` (`shipping_zone_id`),
KEY `order_status_id` (`order_status_id`),
KEY `affiliate_id` (`affiliate_id`),
KEY `marketing_id` (`marketing_id`),
KEY `language_id` (`language_id`),
KEY `currency_id` (`currency_id`),
KEY `payment_company_id` (`payment_company_id`),
KEY `payment_tax_id` (`payment_tax_id`)
) ENGINE=MyISAM AUTO_INCREMENT=39783 DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set
Best Answer
This looks like a bug. The improvements to the optimizer regarding anti-joins and subquery materialization, introduced in 5.6, seem relevant. There was a similar bug (#73368), related to subquery materialization but it has been fixed in 5.6.22 version.
I suggest you first, try running the query with each of the following options and check if you get the same unexpected/wrong results:
Just noticed that it's a MyISAM table, so it's worth checking as well if it is a corruption issue (you can
CHECK
and/orREPAIR
the table).Then update your installation with the latest 5.6.26 version and check again with default options (and again with the 2 options above).
If you are still getting wrong results, report the bug to MySQL, adding the query, the table
CREATE
statement, theEXPLAIN
output and uploading a dump of the table as well, so they can reproduce it. If you can reproduce the bug with a smaller table (just the 2-3 columns and a few rows) would be much better than a 50-column and a thousands rows table.