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 クエリです。私は Person からすべてを選択したくなく、彼が所有している車の PlateNr を含めたくありません。例:

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

123456789       Max      123ABC
123456787       John     3338AAA
123456788       Tom      

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

そのため、Person テーブルのすべてを表示し、その人物が実際に CarOwner である場合は CarOwner のコンテンツも表示できるようにしたいと考えています。これまでのところ、「SELECT * from Person, CarOwner WHERE Person.SSN = CarOwner.SSN;」です。しかし、これは明らかに、CarOwners である人物のみを表示することになります。

十分に説明していただければ幸いです、ありがとう。

4

2 に答える 2

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 を表示

PS主キーPlateNrのタイプを変更しました(intではなくvarcharで)

于 2013-09-26T12:27:27.173 に答える
1

ssn、名前、車を選択

pさんから

LEFT OUTER JOIN CarOwner co

ON p.SSN = co.SSN

LEFT OUTER JOIN Car c

ON co.PlateNr = c.PlateNr

于 2013-09-26T12:30:34.047 に答える