MySql неожиданный результат запроса - PullRequest
0 голосов
/ 05 октября 2019

У меня есть такие таблицы offers и offer_operating_systems, связанные offer_id. Я сделал два запроса, и из моего понимания они должны возвращать один и тот же результат, но они не

Запрос 1:

select
  count(*)
from
  `offers`
where
  (
     select count(*)
     from `offer_operating_systems`
     where
         `offer_operating_systems`.`offer_id` = `offers`.`id`
       and
        `operating_system` = 'android'
) = 1
order by `id` asc

Запрос 2:

select
  count(*)
from offer_operating_systems
where
  operating_system = 'android'
order by `id` asc

Можеткто-нибудь объяснит мне, почему результаты не совпадают? Спасибо!

EDITED

operating_system столбец уникален, поэтому каждое предложение может иметь только одну запись с adnroid

Структуры таблицы

CREATE TABLE `offers` (
                          `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
                          `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
                          `type` int(11) NOT NULL DEFAULT '0',
                          `url` text COLLATE utf8_unicode_ci,
                          `status` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'pending',
                          `api_created_at` timestamp NULL DEFAULT NULL,
                          `api_updated_at` timestamp NULL DEFAULT NULL,
                          `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
                          `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
                          PRIMARY KEY (`id`),
                          KEY `offers_status_index` (`status`)
) ENGINE=InnoDB AUTO_INCREMENT=423 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci


CREATE TABLE `offer_operating_systems` (
                                           `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
                                           `offer_id` int(10) unsigned NOT NULL,
                                           `operating_system` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
                                           `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
                                           `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
                                           PRIMARY KEY (`id`),
                                           UNIQUE KEY `offer_operating_systems_offer_id_operating_system_unique` (`offer_id`,`operating_system`),
                                           KEY `offer_operating_systems_offer_id_foreign` (`offer_id`), 
                                           CONSTRAINT `offer_operating_systems_offer_id_foreign` FOREIGN KEY (`offer_id`) REFERENCES `offers` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=728 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...