[英]MySQL query to only select parent record with ALL options from child table NOT some
我正在努力寫一個查詢來檢索同時帶有“ allows”和“ cd player”的汽車。 看來我的查詢返回的是一個或另一個的汽車,而不僅是返回兩個都有的汽車。 這是如何重現我的問題:
create database `car_sales`;
use `car_sales`;
create table car (
`id` int(11) not null primary key auto_increment,
`make` varchar(255) not null,
`model` varchar(255) not null
);
create table `option` (
`id` int(11) not null primary key auto_increment,
`car_id` int(11) not null,
`name` varchar(255) not null,
foreign key (`car_id`) references car(id),
index(`name`)
);
insert into car (`id`,`make`,`model`) values(1,'ford','focus');
insert into car (`id`,`make`,`model`) values(2,'tesla','P85D');
insert into car (`id`,`make`,`model`) values(3,'totoya','corolla');
insert into car (`id`,`make`,`model`) values(4,'volkswagon','polo');
insert into `option`(`car_id`,`name`) values(1,'arcon');
insert into `option`(`car_id`,`name`) values(1,'alloys');
insert into `option`(`car_id`,`name`) values(2,'cd player');
insert into `option`(`car_id`,`name`) values(2,'arcon');
insert into `option`(`car_id`,`name`) values(2,'alloys');
insert into `option`(`car_id`,`name`) values(3,'leather');
insert into `option`(`car_id`,`name`) values(3,'sunroof');
insert into `option`(`car_id`,`name`) values(3,'alloys');
insert into `option`(`car_id`,`name`) values(4,'electric windows');
insert into `option`(`car_id`,`name`) values(4,'cd player');
然后,我執行以下查詢,該查詢返回具有至少一個功能但不同時具有兩個功能的結果:
select c.*,o.* from car c left join `option` o on (c.id=o.car_id) having o.name in ('alloys','cd player');
請幫助我調整此查詢,以便僅獲得同時具有這兩種功能的汽車!
不需要左連接,因為結果必須具有2個選項。
select make, model
from car c
join `option` o on (c.id = o.car_id)
where name in ('alloys','cd player')
group by make, model having count(*) = 2
;
我強烈建議不要使用mysql關鍵字(選項)作為表名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.