2013-09-26 5 views
2
create table Person(

SSN INT, 
Name VARCHAR(20), 
primary key(SSN) 

); 

create table Car(

PlateNr INT, 
Model VARCHAR(20), 
primary key(PlateNr) 

); 

create table CarOwner(

SSN INT, 
PlateNr INT, 
primary key(SSN, PlateNR) 
foreign key(SSN) references Person (SSN), 
foreign key(PlateNr) references Car (PlateNr) 

); 

Insert into Person(SSN, Name) VALUES ('123456789','Max'); 
Insert into Person(SSN, Name) VALUES ('123456787','John'); 
Insert into Person(SSN, Name) VALUES ('123456788','Tom'); 


Insert into Car(PlateNr, Model) VALUES ('123ABC','Volvo'); 
Insert into Car(PlateNr, Model) VALUES ('321CBA','Toyota'); 
Insert into Car(PlateNr, Model) VALUES ('333AAA','Honda'); 

Insert into CarOwner(SSN, PlateNr) VALUES ('123456789','123ABC'); 
Insert into CarOwner(SSN, PlateNr) VALUES ('123456787','333AAA'); 

Проблема, с которой я столкнулся, - это запрос SELECTE, который я хочу сделать. Я wan't, чтобы иметь возможность выбрать все, от лица и wan't включаемые в PlateNr автомобиля он владелец, пример:SQL Simple SELECT Query

PERSON

--------------------------------- 
SSN   NAME  Car 

123456789  Max  123ABC 
123456787  John  3338AAA 
123456788  Tom  

---------------------------------- 

Итак, я хочу быть способный показать все из таблицы Person и отображать содержимое CarOwner, а также, если человек фактически является CarOwner. То, что я до сих пор: «SELECT * from Person, CarOwner WHERE Person.SSN = CarOwner.SSN;». Но это, очевидно, приводит только к показу человека (ов), которые являются CarOwners.

Надеюсь, что я достаточно хорошо объяснил, спасибо.

ответ

2

Попробуйте это:

SELECT p.*, c.* 
FROM Person p 
LEFT OUTER JOIN CarOwner co 
ON p.SSN = co.SSN 
LEFT OUTER JOIN Car c 
ON co.PlateNr = c.PlateNr 

Показать SQLFiddle

P.S. Я изменил тип вашего первичного ключа PlateNr (в VARCHAR и не в межд)

+0

Это именно то, что я искал, спасибо !. Мне бы это понравилось, если у вас есть время, чтобы объяснить это мне, как будто мне 5, что этот вопрос делает на самом деле. К сожалению, я не так много работал с JOINS. –

+0

Пожалуйста, изучите каждое руководство по SQL, чтобы лучше понять использование INNER и LEFT/RIGHT OUTER JOIN. См. Здесь http://www.w3schools.com/sql/ Хороший день;) –

+0

Хорошо, да, у w3schools было очень хорошее объяснение. Еще раз спасибо! –

1

выберите Ssn, имя, автомобиль

от Person р

LEFT OUTER JOIN CarOwner совместно

ON p.SSN = co.SSN

LEFT OUTER JOIN автомобиль с

ON co.PlateNr = c.PlateNr