2016-05-06 8 views
1

ich die folgenden Tabellen erstellen:Wie bekomme ich einen bestimmten Namen vom Kunden in MYSQL?

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) 
); 

ich folgende Termine eingefügt:

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'); 

Die Frage ist: wie Kunden auszuwählen, die Unfälle in jeder ihrer Politik hatte nicht haben?

Mein Problem ist, dass wenn ich versuchte, "nicht in" zu verwenden. Mit "Louis" mindestens eine Richtlinie in der Tabelle "Unfälle", die Abfrage zeigen Sie mir "Louis" und sollte zeigen, nicht "Louis"

Meine Frage:

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 zurückgeben mich:

+-------+ 
| name | 
+-------+ 
| Louis | 
+-------+ 
+0

'nICHT I N 'kann viele Benutzer überraschen, wenn die Unterabfrage eine Null zurückgibt. Mein Tipp ist, entweder 'NOT EXISTS' zu verwenden oder sicherzustellen, dass die Unterabfrage keine Nullen zurückgibt. – jarlh

+0

Warum diese ungeraden ID Spalten Datentypen? Was ist los mit Integer? – jarlh

Antwort

1

Nutzung nicht in und Exklusionsverknüpfung

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); 
+0

Es funktioniert perfekt. Danke :) – Python241820

1
Select name FROM customers WHERE ID NOT IN (
    Select v.ID FROM 
    accidents a, policies p, living_places v 
    WHERE a.code_policy = p.code_policy 
    AND p.code_living_place = v.code 
) 
+0

Es funktioniert perfekt. Danke dir :) – Python241820

Verwandte Themen