SELECT `text`,
`oc_product_to_category.product_id`
FROM `oc_product_attribute` AS pa
LEFT JOIN `oc_attribute_description` AS od ON pa.`attribute_id`=od.`attribute_id`
LEFT JOIN `oc_product_to_category` AS opc ON pa.`product_id`=od.`product_id`
由oc_product_to_category.product_id
引起的问题。我删除了它,它工作。据我所知,我可以这样做。product_id
但为什么oc_product_to_category.product_id
不起作用?
答案 0 :(得分:3)
在这种情况下,反引号不会导致您的问题。
您为表别名,但随后在列列表中使用了原始名称。您需要通过别名来引用它。
oc_product_to_category.product_id
应该是
opc.product_id
我建议您删除所有反引号,然后编写标准SQL。我在查询中看不到任何证明用非标准转义序列混淆它的理由;包括TEXT,因为MySQL允许你使用它未转义,以及其他保留字的简短列表,如ACTION,BIT,DATE,ENUM,NO,TIME和TIMESTAMP。
http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html
一般情况下,我避免转义标识符,并且我特别避免使用反引号,因为它们是非标准且不可移植的。如果配置正确,MySQL可以处理双引号的标准SQL引用语法。在新数据库上,我启用了ANSI_QUOTES。
SET global sql_mode='ANSI_QUOTES';
虽然您不应该在生产数据库上执行此操作,因为它将更改现有查询的行为。启用后,您将能够使用ANSI(标准)引用,但副作用是您不能再使用双引号作为字符串文字值,但是,这也是一种仅适用于MySQL的非标准做法,应该要避免。
答案 1 :(得分:0)
更改
SELECT `text`,
`oc_product_to_category.product_id`
要
SELECT `text`,
`oc_product_to_category`.`product_id`
或者,如果字段/表名称不是保留字,则只需删除后面的刻度。这里text
是mysql的保留字,因此它用反复写入,如
SELECT `text`,
oc_product_to_category.product_id
您可以在字段名称,表格名称上放回标记。您只是将表格名称和字段名称组合在一起,这就是您收到错误的原因。
答案 2 :(得分:0)
oc_product_to_category.product_id
如果你想使用反引号,那么将它分别用于你的表和列,如下所示:
oc_product_to_category
。product_id
此外,您对表格别名,因此请使用别名,如下所示:
opc
。product_id
但在这种情况下你不需要反叛。