-4

B1、B3、および B4 のパフォーマンス グレードを持つスタッフのスタッフ名、グレード、およびボーナスの値を表示するために、オラクルで不等結合を実行しようとしています。

SELECT Name, Grade, BonusPercent,  
  FROM STAFFING, STAFF BONUS, STAFF,  
   WHERE PerformanceGrade = B1, B3, B4; 

運が悪く、エラーが発生し続けます。どんな助けでも大歓迎です。

4

1 に答える 1

3

繰り返しになりますが、発生しているエラーは、そこにあるべきではない末尾のコンマが原因です。

また、中央スペースがあり、 1つの値を3つのコンマ区切り値と等しくすることはできないためSTAFF BONUSは有効なテーブル名ではありません。この関数を使用する必要があります。これは、論理的に3つのORに相当します。in

SELECT Name, Grade, BonusPercent   -- NO TRAILING COMMA
  FROM STAFFING, STAFF_BONUS, STAFF -- NO TRAILING COMMA, NO SPACE IN TABLE NAME
 WHERE PerformanceGrade in (B1, B3, B4) -- USE IN

ただし、これを十分に強調することはできません。このクエリが実際に必要なものになる可能性は最小限です。これにより、3つのテーブルすべてのデカルト積が得られます。つまり、すべてのスタッフに対して、すべてのボーナスが得られます。あなたが望むものではありません。

JOIN共通の列を使用してテーブルを一緒に使用するのがより一般的です。例えば

select staff.name, staff.grade, staff_bonus.bonuspercent
  from staffing 
  join staff
    on staffing.id = staff.staffing_id
  join staff_bonus
    on staff_bonus.id = staff.bonus_id
 where PerformanceGrade in (B1, B3, B4)

あなたのテーブルがどのように見えるか私にはわからないので、これは明らかに完全に構​​成されていますが、あなたに一般的な考えを与えるはずです。

結合基本的なSQL構文を読むことを強くお勧めします。

于 2012-08-05T10:51:20.630 に答える