2017-10-18 10 views
0

このクエリは動作します:私は2番目SQLの列名は、キーワード「カテゴリ」である

と間違っているものを把握することはできません

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'; 

:この1つはエラーをスロー

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'; 

のに対し、

+0

Oracleは[ ''と] '認識しません。 '。 –

+0

oracle: 'WHERE" category "= 'soft drink'の二重引用符を使用することができます;' –

+0

'category'は実際にはキーワードであり、そのために列名として使用することは本当に悪い考えです。しかし、キーワード(予約されていないリスト - はるかに短いリスト)を列名として使用することは不正ではなく、エスケープせずに列名を参照できます。大括弧や二重引用符などの必要はありません(テーブルを作成したときに二重引用符を使用した場合を除き、二重引用符を使用し、クエリで使用するときは元の大文字と完全に一致させる必要があります)。 – mathguy

答えて

1

クエリに複数のテーブルがある場合、常に列名を修飾する必要があります。最初のクエリでWHERE句はFULL JOINを元に戻します。実際、私はINNER JOINが最も適切であると推測しています。注文書にproductsテーブルに含まれていない商品はどのようにありますか?あなたの2番目のクエリ、[]については

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'; 
関連する問題