如何在MYSQL中从客户处获取特定名称?
我创建以下表格:如何在MYSQL中从客户处获取特定名称?,mysql,sql,Mysql,Sql,我创建以下表格: create table customers ( ID varchar(9), name varchar(15), CONSTRAINT pk_id PRIMARY KEY (ID) ); create table living_places ( code varchar(7), ID varchar(9), CONSTRAINT pk_co
create table customers
(
ID varchar(9),
name varchar(15),
CONSTRAINT pk_id PRIMARY KEY (ID)
);
create table living_places
(
code varchar(7),
ID varchar(9),
CONSTRAINT pk_code PRIMARY KEY (code)
);
create table policies
(
code_policy varchar(7),
code_living_place varchar(7),
CONSTRAINT pk_code_policy PRIMARY KEY (code_policy)
);
create table accidents
(
code_accident varchar(7),
code_policy varchar(7),
CONSTRAINT pk_code_accident PRIMARY KEY (code_accident)
);
我插入了以下日期:
insert into customers(ID, name)
values('fx1','Louis');
insert into customers(ID, name)
values('fx2','Peter');
insert into customers(ID, name)
values('fx3','Alice');
insert into living_places(code, ID)
values('001','fx1');
insert into living_places(code, ID)
values('002','fx2');
insert into living_places(code, ID)
values('003','fx1');
insert into living_places(code, ID)
values('004','fx3');
insert into policies(code_policy, code_living_place)
values('p1','001');
insert into policies(code_policy, code_living_place)
values('p2','002');
insert into policies(code_policy, code_living_place)
values('p3','003');
insert into accidents(code_accident, code_policy)
values('A1','p1');
insert into accidents(code_accident, code_policy)
values('A2','p2');
问题是:如何选择保险单中没有发生事故的客户
我的问题是,当我试图使用“notin”时。如果“Louis”表中至少有一个策略为“意外”,则查询将显示“Louis”,而不应显示“Louis”
我的问题是:
create or replace view view as
select code from living_places v where code not in (
select distinct a.code_living_place from
policies as a inner join accidents as c
on a.code_policy = c.code_policy
);
select name from customers where ID in (select ID from living_places where code in (select code from view where code in (select code_living_place from policies)));
MySQL返回我:
+-------+
| name |
+-------+
| Louis |
+-------+
不在和内部联接中使用
select name from customers
where customers.id not in (select living_places.id
from living_places
inner join policies on policies.code_living_place = living_places.code
inner join accidents on accidents.code_policy = policies.code_policy);
如果子查询返回空值,
不在
中,可能会让许多用户感到惊讶。我的建议是要么使用不存在
,要么确保子查询不返回任何空值。为什么要使用那些奇怪的id列数据类型?整数怎么了?
select name from customers
where customers.id not in (select living_places.id
from living_places
inner join policies on policies.code_living_place = living_places.code
inner join accidents on accidents.code_policy = policies.code_policy);