MySQL错误:'on子句'中的'未知列'tablename.colname

时间:2014-03-29 14:06:20

标签: php mysql sql database

我正在尝试将2个表连接到另一个表。我有这个SQL查询:

SELECT
desc_1.description,
desc_2.description,
Object.objID,
Item.itemID
FROM
Object,
Item 
INNER JOIN Foo desc_1 ON desc_1.descID = Object.objDescID
INNER JOIN Foo desc_2 ON desc_2.descID = Item.itemDescID;

但是我收到以下错误:

ERROR 1054: Unkown column 'Object.objDescID' in 'on clause'

期望的输出:

description | description | objID | itemID |
------------+-------------+-------+--------+      
 "Daughter" |   "Shoes"   |   20  |   25   |

有谁知道为什么会这样?该列存在于表格中,我已经检查了拼写等。

2 个答案:

答案 0 :(得分:1)

您无法混合传统隐式连接语法和显式连接语法。使用

SELECT desc_1.description,
       desc_2.description,
       Object.objID,
       Item.itemID
FROM Object
INNER JOIN Item on { fill in the column that relate object and item }
INNER JOIN Foo desc_1 ON desc_1.descID = Object.objDescID
INNER JOIN Foo desc_2 ON desc_2.descID = Item.itemDescID;

答案 1 :(得分:0)

如果您的查询符合要求,请将,替换为cross join

SELECT desc_1.description, desc_2.description,
       Object.objID, Item.itemID
FROM Object CROSS JOIN
     Item INNER JOIN
     Foo desc_1
     ON desc_1.descID = Object.objDescID INNER JOIN
     Foo desc_2
     ON desc_2.descID = Item.itemDescID;

documentation甚至解释了这一点,尽管我承认它有点难以找到:

  

但是,逗号运算符的优先级小于INNER   JOIN,CROSS JOIN,LEFT JOIN等等。如果你混合使用逗号连接   当有连接条件时,其他连接类型,错误   form可能会出现'on子句'中的未知列'col_name'。信息   关于这个问题的处理将在本节后面给出。