如何检查嵌套查询返回的元组中的每个条目是否相同?
How to check if each entry in a returned tuple from a nested query is the same?
嘿,我是 sql 的新手,我似乎找不到解决 problem.I 具有以下实体的好方法
passengers (`id` INT, `name` VARCHAR(45), `surname` VARCHAR(45),
`year_of_birth` INT)
flights (`id` INT, `routes_id` INT, `date` DATE, `airplanes_id` INT)
flights_has_passengers (`flights_id` INT, `passengers_id` INT)
airplanes (`id` INT, `number` VARCHAR(45), `manufacturer`
VARCHAR(45), `model` VARCHAR(45)).
我想制作一个脚本来查找所有乘客的姓名,这些乘客至少在航班上登机,如果登机不止一个,那么这些航班必须使用相同的 airplane.I 尝试return 一个包含飞机的元组,每个乘客都使用过,使用嵌套 query.Then 我尝试使用 all 语句,检查类型中的每个条目是否是 same.I 虽然没有运气。任何建议都会被采纳。
编辑:我想到了以下解决方案,但我不知道它是否正确:
select p1.name, p1.surname
from passengers p1, airplanes a1, flights_has_passengers, flights
where
p1.id = flights_has_passengers.passengers_id and
flights_has_passengers.flights_id = flights.id and
flights.airplanes_id = a1.id
group by p1.id
having count(a1.id) = 1;
更新:根据 OP 对答案的评论,这是使用 NOT EXISTS
的另一种方式
Hey thanks for your answer.Is there another way to implement this without a join statement ?For example something like not exists or all ?
select p.id
from passengers p
join flights_has_passengers fp
on p.id= fp.passengers_id
join flights f
on f.id=fp.flights_id
where not exists
(select 1 from join flights f1
where f1.id=f.id
and f1.airplanes_id<>f.airplanes_id)
也许使用如下所示的 JOIN
select p.id
from passengers p
join flights_has_passengers fp
on p.id= fp.passengers_id
join flights f
on f.id=fp.flights_id
group by p.id
having count(f.airplanes_id)=1
嘿,我是 sql 的新手,我似乎找不到解决 problem.I 具有以下实体的好方法
passengers (`id` INT, `name` VARCHAR(45), `surname` VARCHAR(45),
`year_of_birth` INT)
flights (`id` INT, `routes_id` INT, `date` DATE, `airplanes_id` INT)
flights_has_passengers (`flights_id` INT, `passengers_id` INT)
airplanes (`id` INT, `number` VARCHAR(45), `manufacturer`
VARCHAR(45), `model` VARCHAR(45)).
我想制作一个脚本来查找所有乘客的姓名,这些乘客至少在航班上登机,如果登机不止一个,那么这些航班必须使用相同的 airplane.I 尝试return 一个包含飞机的元组,每个乘客都使用过,使用嵌套 query.Then 我尝试使用 all 语句,检查类型中的每个条目是否是 same.I 虽然没有运气。任何建议都会被采纳。
编辑:我想到了以下解决方案,但我不知道它是否正确:
select p1.name, p1.surname
from passengers p1, airplanes a1, flights_has_passengers, flights
where
p1.id = flights_has_passengers.passengers_id and
flights_has_passengers.flights_id = flights.id and
flights.airplanes_id = a1.id
group by p1.id
having count(a1.id) = 1;
更新:根据 OP 对答案的评论,这是使用 NOT EXISTS
的另一种方式Hey thanks for your answer.Is there another way to implement this without a join statement ?For example something like not exists or all ?
select p.id
from passengers p
join flights_has_passengers fp
on p.id= fp.passengers_id
join flights f
on f.id=fp.flights_id
where not exists
(select 1 from join flights f1
where f1.id=f.id
and f1.airplanes_id<>f.airplanes_id)
也许使用如下所示的 JOIN
select p.id
from passengers p
join flights_has_passengers fp
on p.id= fp.passengers_id
join flights f
on f.id=fp.flights_id
group by p.id
having count(f.airplanes_id)=1