mysql - MYSQL中如何获取身份证?

标签 mysql sql

我创建了以下表格:

create table people (
        ID              varchar(9),
        name            varchar(20),
        CONSTRAINT pk_ID PRIMARY KEY (ID)
);

 create table cars (
        license_plate   varchar(9),
        ID              varchar(9),
        CONSTRAINT pk_ID PRIMARY KEY (license_plate)
);

create table accidents (
        code          varchar(9),
        license_plate varchar(9),    
        CONSTRAINT pk_ID PRIMARY KEY (code)
);

我插入了以下数据:

insert into people(ID, name) values('0x1','Louis');
insert into people(ID, name) values('0x2','Alice');
insert into people(ID, name) values('0x3','Peter');

insert into cars(license_plate, ID) values('001','0x1');
insert into cars(license_plate, ID) values('002','0x2');
insert into cars(license_plate, ID) values('003','0x1');
insert into cars(license_plate, ID) values('004','0x3');

insert into accidents(code, license_plate) values('fd1','001');
insert into accidents(code, license_plate) values('fd2','004');
insert into accidents(code, license_plate) values('fd3','002');

问题是:如何选择没有发生过汽车事故的人?

我的问题是,当我尝试使用not in时。 accidents 表中至少有一辆汽车为“Louis”,查询会显示“Louis”,而不应显示“Louis”。

我的查询:

select ID from people where ID in (select ID from cars where license_plate not in (select license_plate from accidents));

结果:

+-----+
| ID  |
+-----+
| 0x1 |
+-----+

最佳答案

select name from people where ID not in (
  select distinct c.ID from 
    accidents as a inner join cars as c 
    on a.license_plate = c.license_plate 
)

解释 = 子查询将连接汽车和事故,将为您提供所有发生事故的汽车的 ID。在此,您可以在人员表上运行 not in 查询

关于mysql - MYSQL中如何获取身份证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37059776/

相关文章:

mysql - 在mysql中用join替换子查询

java - 使用 hibernate 将 XML 保存到 mysql

mysql - 新表与新模式

sql - 在数据库列中搜索数字,其中列包含由分隔符 '"&"在 SQLite 中分隔的一系列数字

python - 使用 Python 2.7 更新 SQL 表?

sql - 帮助我进行 SQL 查询(需要它始终至少返回一行。)

PHP:WAITING时间,因此函数直到 x 分钟后才能执行

sql - 多个日期范围之间的分钟总和

sql server : MERGE has unexpected results

php - 模拟大量使用