Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MYSQL中选择特定客户?_Mysql_Sql - Fatal编程技术网

在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为重复的帖子感到抱歉,我以为这个问题会被其他人看到。我不会再这样做了