在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_c
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 bills
(
code varchar(7),
code_policy varchar(7),
paid_out boolean,
CONSTRAINT pk_code_bill PRIMARY KEY (code)
);
I inserted the following dates:
我插入了以下日期:
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 bills(code, code_policy, paid_out)
values('b1','p1','1');
insert into bills(code, code_policy, paid_out)
values('b2','p1','1');
insert into bills(code, code_policy, paid_out)
values('b3','p2','0');
insert into bills(code, code_policy, paid_out)
values('b4','p2','1');
insert into bills(code, code_policy, paid_out)
values('b5','p3','0');
insert into bills(code, code_policy, paid_out)
values('b6','p3','1');
问题是:如何选择那些支付了所有保单的人
我的问题是“Louis”有两个策略“p1”和“p3”,“p1”是付费的,但“p3”是不付费的
我的问题是:
select ID from living_places where code in (
select code from living_places where code in (
select code_living_place from policies where code_policy in (
select code_policy from bills where paid_out=1 and code_policy not in (
select code_policy from bills where paid_out=0))));
MySQL返回我:
+------+
| ID |
+------+
| fx1 |
+------+
附言:“路易斯”并不是所有的保险单都付了。例如,账单“b5”未支付。我将使用聚合和具有条款的
来处理此问题:
select p.id
from policies p join
living_places lp
on p.code = lp.code_living_place join
bills b
on b.code_policy = p.code_policy
group by p.id
having sum(b.paid_out = 1) = count(*);
我更喜欢总结案例法:
SELECT x.name
FROM
(SELECT c.name, SUM(CASE WHEN b.paid_out THEN 0 ELSE 1 END) all_paid
FROM customers c JOIN living_places l ON c.ID = l.ID
JOIN policies p ON l.code = p.code_living_place
JOIN bills b ON p.code_policy = b.code_policy
GROUP BY c.name) x
WHERE x.all_paid = 0;
也许你可以通过在这里使用HAVING子句来避免嵌套的SELECT…请不要重复同样的问题两次。你今天已经问了这个问题,它有答案。您需要继续使用您已经制作的相同问题帖子,而不是生成相同的内容,以便再次到达新帖子的顶部。这不是reddit。@Dresden为重复的帖子感到抱歉,我以为这个问题会被其他人看到。我不会再这样做了