创建视图:单个表的多个外键关系

时间:2012-06-25 03:36:09

标签: mysql

我有一个表tblNoComp,它有两列,两个外键都指向tblPackage.ID。 tblNoComp的目的是通过简单地将这些包的ID存储在两列OneIDTwoID中来存储哪些包彼此不兼容。

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

尝试创建一个显示两个并排的tblPackage.Name的视图 - 我有以下内容,但不确定如何获取TwoID包名称..

选择tblNoCompOneIDtblPackagesPackagetblNoCompTwoIDtblPackages。{{1} } 从tblNoComp,tblPackages WHERE(PackagetblNoComp = OneIDtblPackages

目前第二个PIDtblPackages只是显示OneID名称,而不是TwoID ..不确定如何解决?

谢谢!

- 如果一个简单的问题道歉,我已经搜索了一个小时但却无法正确描述我的问题。

1 个答案:

答案 0 :(得分: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子句中作为两个单独的表引用。