嘿,我对sql很陌生,似乎找不到解决问题的好方法.我有以下实体

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)).

我想制作一个脚本,找到所有乘客的名字,他们至少在航班上登机,如果登机不止一次,这些航班必须使用同一架飞机.我试图使用嵌套查询返回一个包含每个乘客都使用过的飞机的元组.然后我try 使用all语句,判断typle中的每个条目是否相同.不过我运气不好.任何建议都将受到重视.

编辑:我想到了以下解决方案,但我不知道它是否正确:

     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对答案的 comments ,这里有另一种使用NOT EXISTS的方法

谢谢你的回答.有没有其他方法可以在没有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
 where not exists 
 (select 1 from join flights f1 
 where f1.id=f.id
 and f1.airplanes_id<>f.airplanes_id)

可能使用下面这样的连接

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

Mysql相关问答推荐

如何在Sequelize中将查询作为选项?

SQL不断返回查询失败,并且不知道从这里到哪里go

MySQL有没有办法直接从CSV文件中读取而不是导入它?

计算男生的人数和女生的人数.学生是有入学记录的人

为什么歌曲详细信息未显示在 Liked.handlebars 视图中?

是否可以使用 IN 或 NOT IN 从没有关联其他表中任何行的表中返回这些名称?

计算MySQL中的连续出现

为什么 MySQL 不使用索引进行简单的SELECT * FROM Table WHERE field='value'查询?

当每组的列值发生变化时 Select 并连接行

MYSQL除以零警告,奇怪的行为

在 SQL 中的 case 语句之后将新列转换为 INT

MySQL 中的 LATERAL 语法 - 是否只是说左表首先执行以便下一个可以引用它?

有没有更好的方法在无限滚动的网页上呈现获取的提要数据?

如果在表中多次发现 a 列中的相同值,则排除所有行

为什么在有 BEGIN 和 END 时为存储过程指定分隔符?

MySQL 添加一个 NOT NULL 列

MySQL Workbench 无法加载 mysql.proc

Mysql中int(10)的最大大小是多少

SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #3 不在 GROUP BY 子句中并且包含非聚合

MySQL 1062 - 键 'PRIMARY' 的重复条目 '0'