admin

如何从两个不同的列到单独的表上的同一列进行联接

sql

我在一个表上有两列,它们引用第二个表上的同一列,以获得与指定ID相关的名称。

下面是我正在使用的查询无法正常工作。invTypes上的两个LEFT
JOINS导致了此问题。我读了很多书,并且一直在为此绞尽脑汁。我一辈子都无法弄清楚如何使该方法返回的名称属于在主表中两个单独位置中显示的ID。

无需发布整个数据库结构(这是巨大的)的注意事项

两者typeIDitemTypeID存在于主表。这些
typeID中的每一个都引用invTypes表中的同一列。该invTypes表包含与所述ID相对应的名称。

此外,在语句的SELECT部分​​中,typeName来自invTypesstationName来自staStations表。

主要的问题是,是否为invTypes。typeName是从两列中两次引用的,我如何1:将表正确连接到这两点,以及2:如何区分两个invTypes中的区别。typeName如果可以创建两个JOIN语句,则返回该值。

SELECT 
`logTime`,`itemID`,`typeName`,`actorName`,`stationName`,`action`,`passwordType`,
`quantity`,`oldConfiguration`,`newConfiguration` 
        FROM eve_container_audit 
        LEFT JOIN invTypes ON eve_container_audit.typeID = invTypes.typeID
        LEFT JOIN invTypes ON eve_container_audit.itemTypeID = invTypes.typeID

        LEFT JOIN staStations ON eve_container_audit.locationID = staStations.stationID

阅读 182

收藏
2021-07-01

共1个答案

admin

这是一次只加入他们的方法:

SELECT 
  `logTime`,
  `itemID`,
  `typeName`,
  `actorName`,
  `stationName`,
  `action`,
  `passwordType`,
  `quantity`,
  `oldConfiguration`,
  `newConfiguration` 
FROM
  eve_container_audit 
LEFT JOIN
  invTypes
ON
  eve_container_audit.typeID = invTypes.typeID and
  eve_container_audit.itemTypeID = invTypes.typeID
LEFT JOIN
  staStations
ON
  eve_container_audit.locationID = staStations.stationID

如果您需要加入他们两次,请使用别名:

SELECT 
  `logTime`,
  `itemID`,
  `typeName`,
  `actorName`,
  `stationName`,
  `action`,
  `passwordType`,
  `quantity`,
  `oldConfiguration`,
  `newConfiguration` 
FROM
  eve_container_audit 
LEFT JOIN
  invTypes
ON
  eve_container_audit.typeID = invTypes.typeID
LEFT JOIN
  invTypes invTypes2
ON
  eve_container_audit.itemTypeID = invTypes2.typeID
LEFT JOIN
  staStations
ON
  eve_container_audit.locationID = staStations.stationID
2021-07-01