2017-10-18 70 views
0

此查询的工作:SQL列名是关键字“类别”

SELECT product_name, unit_price, order_due_date 
FROM orders 
FULL OUTER JOIN products ON orders.product_id = products.product_id 
WHERE product_name = 'bun'; 

,而这一次抛出一个错误:

ORA-00936: "missing expression"

SELECT product_name, unit_price, order_due_date 
FROM orders 
FULL OUTER JOIN products ON orders.product_id = products.product_id 
WHERE [category] = 'soft drink'; 

我想不出有什么错第二

+0

甲骨文不承认'['和'] '。 –

+0

你可以在oracle中使用双引号:'WHERE'category'='soft drink';' –

+0

'category'确实是一个关键字,因此使用它作为列名是一个非常糟糕的主意。但是,使用关键字(不是'reserved' - 列表要短得多)作为列名是不合法的,您可以在不转义列的情况下引用列名。您不需要方括号或双引号或任何类似的内容(除非您在创建表时使用双引号,在这种情况下,您必须使用双引号并与在查询中使用时的原始大写匹配)。 – mathguy

回答

1

如果在查询中有多个表格,则应始终限定列名称。在您的第一个查询中,WHERE子句将撤销FULL JOIN。事实上,我猜测INNER JOIN是最合适的。如何订购产品不在products表中?

SELECT p.product_name, ?.unit_price, o.order_due_date 
FROM orders o INNER JOIN 
    products p 
    ON o.product_id = p.product_id 
WHERE p.product_name = 'bun'; 

至于你的第二个查询,[]不是甲骨文的分隔符。要么离开他们了:

WHERE category = 'soft drink' 

或者,如果出于某种模糊的原因列名居然有这些字符,则使用双引号:

WHERE "[category]" = 'soft drink';