Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何从两个不同的列连接到单独表上的同一列_Mysql_Sql_Join - Fatal编程技术网

Mysql 如何从两个不同的列连接到单独表上的同一列

Mysql 如何从两个不同的列连接到单独表上的同一列,mysql,sql,join,Mysql,Sql,Join,我在一个表中有两列,它们引用第二个表中的同一列,以获取与指定ID相关的名称 下面是我正在使用的不起作用的查询。invTypes上的两个左连接导致了问题。我读了又读,一直为此绞尽脑汁。我一辈子都搞不懂如何让它返回属于主表中两个单独位置中显示的ID的名称 需要注意的是,没有发布整个数据库结构,这是巨大的 typeID和itemTypeID都显示在主表中。每一个都引用invTypes表中相同的typeID列。invTypes表包含与所述ID对应的名称 此外,在语句的SELECT部分,typeName来

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

下面是我正在使用的不起作用的查询。invTypes上的两个左连接导致了问题。我读了又读,一直为此绞尽脑汁。我一辈子都搞不懂如何让它返回属于主表中两个单独位置中显示的ID的名称

需要注意的是,没有发布整个数据库结构,这是巨大的

typeID和itemTypeID都显示在主表中。每一个都引用invTypes表中相同的typeID列。invTypes表包含与所述ID对应的名称

此外,在语句的SELECT部分,typeName来自invTypes,stationName来自Stations表

主要问题是,如果两列中引用了两次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

以下是如何加入他们一次:

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

试试这个。基本上创建同一表的第二个别名。在选择中,请特别参考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

由于要两次合并同一个表,因此需要为表的两个副本指定唯一的别名,否则查询将不明确

...
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
...

一些示例数据有助于更好地理解这一原因,从外观上看,typeID和itemTypeID在eve\u container\u audit的每一行中似乎具有相同的值?确定itemTypeID引用容器类型,typeID引用容器内的项,但是,这两个id从另一个表的同一位置获取名称。我希望这有帮助。要给出数据的实际表示形式是非常困难的,因为表格很大,而且与手头的问题相关的东西很多。由于容器和容器中的项目都是相同的项目,因此它们以相同的方式从相同的项目数据库中获取名称1064-您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,了解第2行“inv2.typeName as sub_类型、actorName、stationName、action、passwordType”附近使用的正确语法,以供更正。这也很有魅力。我已经标记了一个正确的,但是我已经+1e了。非常感谢你。这个答案有望帮助我和其他搜索此网站的人了解别名的工作原理。1054-未知列“invTypes.typeID”在“on子句”中我不知道为什么它会说未知列,因为它确实存在。已编辑。我忘了将invTypes更改为invtypes1。第二个查询非常有效。非常感谢你。你的例子将非常有助于我将来理解如何使用别名,这正是我一直在努力解决的问题。