如何加入这两个表?

时间:2014-10-21 05:16:57

标签: mysql join self-join

您好我的数据库中有这些表格。

REATE TABLE Titles (
    TitleID int NOT NULL ,
    ArtistID int NULL ,
    Title varchar (50) NULL ,
    StudioID int NULL ,
    UPC varchar (13) NULL ,
    Genre varchar (15) NULL 
);

Insert Into Titles Values(1,1,'Meet the Neurotics',1,'2727366627','alternative');
Insert Into Titles Values(3,15,'Smell the Glove',2,'1283772282','metal');
Insert Into Titles Values(4,10,'Time Flies',3,'1882344222','alternative');
Insert Into Titles Values(5,1,'Neurotic Sequel',1,'2828830202','alternative');
Insert Into Titles Values(6,5,'Sonatas',2,'3999320021','classical');
Insert Into Titles Values(7,2,'Louis at the Keys',3,'3838227111','jazz');

CREATE TABLE Studios (
    StudioID int PRIMARY KEY ,
    StudioName varchar (40) NULL ,
    Address varchar (60) NULL ,
    City varchar (25) NULL ,
    Region varchar (15) NULL ,
    PostalCode varchar (10) NULL ,
    Country varchar (20) NULL ,
    WebAddress varchar (40) NULL ,
    Contact varchar (50) NULL ,
    EMail varchar (40) NULL ,
    Phone varchar (16) NULL ,
    SalesID smallint NULL 
);

我正在尝试列出在同一工作室录制两个标题的所有标题和工作室名称对。 我尝试过以下方法:

SELECT t1.Title, t2.Title, Studioname
FROM Titles t1, Titles t2, studios
WHERE t1.TitleID < t2.TitleID;

但是,上面输出了很多重复内容,我不确定如何修复它。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您可以通过Titles加入自己来走上正轨。但是你需要描述条件,即他们共享一个共同的工作室。

使用<确保您不会以相反的顺序出现两次,从而使您走上正轨。当然,相同的TitleID不应该加入自己 - 它必须是一个不同的标题。

. . .
FROM Titles t1 JOIN Titles t2 ON t1.StudioID = t2.StudioID
  AND t1.TitleID < t2.TitleID
. . .

然后基于其中任何一个,因为它们都具有相同的StudioID,所以加入到Studios的哪一个并不重要。但你必须确保将这些标题与工作室的相应行匹配。

. . .
JOIN Studios s ON t1.StudioID = s.StudioID