创建视图:多个外键关联到单表
我有一个表tblNoComp,它有两列,两个外键都指向tblPackage.ID。 tblNoComp的目的是通过简单地将这些软件包的ID存储在两列OneID
和TwoID
中来存储哪些软件包彼此不兼容。创建视图:多个外键关联到单表
可能不是最好的存储方式,但由于多个软件包与其他软件不兼容,这似乎是最合乎逻辑的。
试图创建一个视图,显示了两个并排的tblPackage.Name - 我有以下,但不知道该如何获得TwoID
包名称..
选择tblNoComp
。 OneID
,tblPackages
。 Package
,tblNoComp
。 TwoID
,tblPackages
。 Package
FROM tblNoComp,tblPackages WHERE(tblNoComp
。OneID
= tblPackages
。PID
)
目前第二tblPackages
。 Package
只是显示OneID名称,而不是TwoID ..不知道如何解决?
谢谢!
- 答案如果一个简单的问题,我搜索了一个小时,但还没有完全能够正确描述我的问题。
您在您的评论有的代码:
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
子句中作为两个单独的表引用。
惊人 - 它完美的作品。我需要更多地研究这些,因为我现在可以看到你定义了两个别名的位置。非常感谢。 – lieb39
可能重复[你如何加入同一张表,两次,在MySQL?](http://stackoverflow.com/questions/199953/how-do-you-join-on-the-same-table -twice-in-mysql) – David
为了给出一个总结,你基本上需要做的是在查询中“连接”连接表,这样你就可以在两个名字下(两个键)连接两次。基本上将同一个表视为两个单独的连接表。 – David
也有用:http://stackoverflow.com/q/3201359/328193和http://stackoverflow.com/q/7515202/328193和http://forums.mysql.com/read.php?10,190885 – David