creo le seguenti tabelle:Come selezionare un cliente specifico?
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)
);
ho inserito le seguenti date:
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');
La domanda è: come selezionare quelle persone che hanno tutte le loro politiche a pagamento?
Il mio problema è che Louis
ha due politiche p1
e p3
. Politica p1
è pagato ma non lo è p3
.
La mia domanda:
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 me tornare:
+------+
| ID |
+------+
| fx1 |
+------+
P.S: Louis
non hanno tutte le politiche pagati. Ad esempio, la bolletta b5
non viene pagata.
C'è letteralmente 0 persone nel tuo esempio che avranno tutte le loro politiche pagato. Dal momento che non includi nemmeno la terza persona nel tuo esempio (non esiste una politica 004, quindi nessun riferimento alla persona fx3) e tutti gli altri hanno almeno una bolletta non pagata. – Dresden
esattamente! @MikeS – Python241820