2017-03-10 24 views
0

私は更新を試みていますが、この特定のエラー・コードを実行し続けているようです。外側のWHERE節にある入れ子になったSELECT文を実行すると、更新が必要な正しいエントリをプルできるようになりますが、変更をコミットする完全な文を実行しようとするとエラーが発生します。ORA-00913:多すぎる値

UPDATE expertise 
SET expertise_level = (expertise_level + 1) 
WHERE expertise_level = (SELECT UNIQUE expertise_level, cs.instructor_id 
    FROM class_section cs JOIN course c ON (cs.course_code = c.course_code) 
    JOIN expertise e ON (c.course_code = e.course_code) 
    WHERE (expertise_level < 10) AND (year = '2016')); 

私の構文には何か不足しているか、クエリを構成するためのより良い方法がありますか?ありがとう!

答えて

0

サブクエリには2つの列がありますが、サブクエリは2つの列しか比較されません。あなたが複数の一致があることができればINを使用したい場合があり

UPDATE expertise 
    SET expertise_level = expertise_level + 1 
    WHERE expertise_level = (SELECT expertise_level 
          FROM class_section cs JOIN 
            course c 
            ON cs.course_code = c.course_code 
          WHERE c.course_code = e.course_code AND 
            expertise_level < 10 AND 
            year = '2016' 
          ); 

:あなたが欲しいものを行う一つの方法は、相関副問合せを使用しています。

別のオプションは、タプルで=またはINを使用しています。

UPDATE expertise 
    SET expertise_level = expertise_level + 1 
    WHERE (course_code, expertise_level) = 
       (SELECT c.course_code, expertise_level 
       FROM class_section cs JOIN 
        course c 
        ON cs.course_code = c.course_code 
       WHERE expertise_level < 10 AND 
        year = '2016' 
      ); 

インストラクターがあなたのロジックに含まれるべきかどうかは不明です。構文エラーの原因と思われます。あなたの声明で

2

ルック...

... 
WHERE expertise_level = (SELECT UNIQUE expertise_level, cs.instructor_id 
    FROM class_section 
... 

はどのように "expertise_level" は "expertise_level、instructor_id" に等しいこと ができますか?

関連する問題