我在一个表上有两列引用第二个表上的同一列,以获取与指定ID相关的名称。
以下是我正在使用的查询无效。 invTypes上的两个LEFT JOINS会导致问题。我已阅读并阅读,并且一直在为此而绞尽脑汁。我不能为我的生活找出如何让它返回属于主表中两个不同位置出现的ID的名称。
要注意不要发布整个数据库结构(这是巨大的)
主表上存在typeID
和itemTypeID
。其中每个引用typeID
表中的相同invTypes
列。 invTypes
表包含与所述ID对应的名称。
此外,在语句的SELECT部分中,typeName
来自invTypes
,stationName
来自staStations
表。
主要问题是,如果从两列引用两次invTypes。typeName
,我如何1:正确地将表连接到这两个点,2:我如何区分两者如果可以生成两个JOIN语句,则返回invTypes。typeName
。
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
答案 0 :(得分:1)
以下是如何加入它们一次:
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
答案 1 :(得分:1)
试试这个。基本上创建同一个表的第二个别名。在选择中,请专门引用inv1或inv2以获取正确的值。
SELECT
`logTime`,`itemID`, inv1.`typeName` as main_type , inv2.`typeName` as sub_type, `actorName`,`stationName`,`action`,`passwordType`,
`quantity`,`oldConfiguration`,`newConfiguration`
FROM eve_container_audit
LEFT JOIN invTypes as inv1 ON eve_container_audit.typeID = inv1.typeID
LEFT JOIN invTypes as inv2 ON eve_container_audit.itemTypeID = inv2.typeID
LEFT JOIN staStations ON eve_container_audit.locationID = staStations.stationID
答案 2 :(得分:1)
由于您要连接同一个表两次,因此需要为表的两个副本提供唯一的别名,否则您的查询将不明确。
...
LEFT JOIN invTypes ON eve_container_audit.typeID = invTypes.typeID
LEFT JOIN invTypes ON eve_container_audit.itemTypeID = invTypes.typeID
...
应该是
之类的东西...
LEFT JOIN invTypes AS invtypes1 ON
eve_container_audit.typeID = invtypes1.typeID
LEFT JOIN invTypes AS invtypes2 ON
eve_container_audit.itemTypeID = invtypes2.typeID
...