我在一个表上有两列,它们引用第二个表上的同一列,以获得与指定ID相关的名称。
下面是我正在使用的查询无法正常工作。invTypes上的两个LEFT JOINS导致了此问题。我读了很多书,并且一直在为此绞尽脑汁。我一辈子都无法弄清楚如何使该方法返回的名称属于在主表中两个单独位置中显示的ID。
无需发布整个数据库结构(这是巨大的)的注意事项
两者typeID与itemTypeID存在于主表。这些 表typeID中的每一个都引用invTypes表中的同一列。该invTypes表包含与所述ID相对应的名称。
typeID
itemTypeID
invTypes
此外,在语句的SELECT部分中,typeName来自invTypes和stationName来自staStations表。
typeName
stationName
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
这是一次只加入他们的方法:
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