2017-10-18 69 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';