【问题标题】:How to Join this two tables?如何加入这两个表?
【发布时间】:2014-10-21 05:16:57
【问题描述】:

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

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;

但是,上面的输出有很多重复,我不知道如何修复它。 任何帮助表示赞赏。

【问题讨论】:

    标签: mysql join self-join


    【解决方案1】:

    通过将Titles 加入自身,您走在了正确的轨道上。但你需要描述条件,即他们共用一个工作室。

    使用&lt; 确保您不会让每对以相反的顺序出现两次,这样您就走在了正确的轨道上。当然,同一个 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 2016-06-13
      • 2014-02-27
      • 2013-03-09
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      相关资源
      最近更新 更多