2012-06-25 38 views
0

我有一个表tblNoComp,它有两列,两个外键都指向tblPackage.ID。 tblNoComp的目的是通过简单地将这些软件包的ID存储在两列OneIDTwoID中来存储哪些软件包彼此不兼容。创建视图:多个外键关联到单表

可能不是最好的存储方式,但由于多个软件包与其他软件不兼容,这似乎是最合乎逻辑的。

试图创建一个视图,显示了两个并排的tblPackage.Name - 我有以下,但不知道该如何获得TwoID包名称..

选择tblNoCompOneIDtblPackagesPackagetblNoCompTwoIDtblPackagesPackage FROM tblNoComp,tblPackages WHERE(tblNoCompOneID = tblPackagesPID

目前第二tblPackagesPackage只是显示OneID名称,而不是TwoID ..不知道如何解决?

谢谢!

- 答案如果一个简单的问题,我搜索了一个小时,但还没有完全能够正确描述我的问题。

+0

可能重复[你如何加入同一张表,两次,在MySQL?](http://stackoverflow.com/questions/199953/how-do-you-join-on-the-same-table -twice-in-mysql) – David

+0

为了给出一个总结,你基本上需要做的是在查询中“连接”连接表,这样你就可以在两个名字下(两个键)连接两次。基本上将同一个表视为两个单独的连接表。 – David

+0

也有用:http://stackoverflow.com/q/3201359/328193和http://stackoverflow.com/q/7515202/328193和http://forums.mysql.com/read.php?10,190885 – David

回答

0

您在您的评论有的代码:

SELECT 
    tblNoComp.OneID, 
    tblPackages.Package AS OneIDPackageName, 
    tblNoComp.TwoID, 
    tblPackages.Package AS TwoIDPackageName 
FROM 
    tblNoComp 
    LEFT JOIN tblPackages 
    ON tblNoComp.OneID = tblPackages.PID 

是别名的列,而不是表。别名背后的想法是将JOIN同一个表两次作为两个不同的表,使用两个不同的别名。你只加入一次,并试图使用它两次。

你可能意图更多的东西是这样的:

SELECT 
    tblNoComp.OneID, 
    tblOnePackages.Package AS OneIDPackageName, 
    tblNoComp.TwoID, 
    tblTwoPackages.Package AS TwoIDPackageName 
FROM 
    tblNoComp 
    LEFT JOIN tblPackages AS tblOnePackages 
    ON tblNoComp.OneID = tblOnePackages.PID 
    LEFT JOIN tblPackages AS tblTwoPackages 
    ON tblNoComp.TwoID = tblTwoPackages.PID 

(请注意,我没有一个MySQL语法检查器得心应手,因此这可能需要以正常运行时进行调整。)

请注意,同一个表在两个不同的键上连接了两次,每次给它一个不同的别名,以便它可以在SELECT子句中作为两个单独的表引用。

+0

惊人 - 它完美的作品。我需要更多地研究这些,因为我现在可以看到你定义了两个别名的位置。非常感谢。 – lieb39