2010-12-07 19 views
3

私は、列uniquename、年齢、部署、都市、Homecountryと、列uniquename、exp、資格、HomecountryとEmployeeと呼ばれる別のテーブルを持つ学生と呼ばれるテーブルがあります。更新方法テーブルの1つの列の値を別のテーブルの列の値で更新しますか?

今私は、whereの条件Student.uniquename = Employee.uniquenameとStudent.Homecountry = Employee.Homecountryの下で、Employeeテーブルの資格列の値でStudentテーブルのdepartment列を更新します。

更新文を書くのを手伝ってください。

答えて

18

この種類のクエリは、相関サブクエリと呼ばれます。あなたの条件のために、次のクエリは、あなたの回答に基づいて、この記事を更新....

update students s 
    set s.department = (
      select e.qualification 
      from employee e 
      where s.uniquename = e.uniquename 
       and s.Homecountry = e.Homecountry 
     ); 

次のようになります。

また、今後も、作成テーブルを挿入してステートメント(および予想される結果)を挿入して、ケースを再現してください。期待どおりの結果が表示されない場合や、クエリを実行するときにエラーが表示された場合は、単に「動作していません」というより正確なメッセージを投稿してください。私のsqlplusセッションの結果を以下に示します。

---テーブルを作成し、データを更新...

SQL> select * from student; 

NAME      AGE DEP HOMECOUNTR 
-------------------- ---------- --- ---------- 
Mohan      25 EEE India 
Raja       27 EEE India 
Ahamed      26 ECE UK 
Gokul      25 IT USA 

SQL> select * from employee5; 

NAME      EXP QUA HOMECOUNTR 
-------------------- ---------- --- ---------- 
Mohan      25 ECE India 
Raja       24 IT India 
Palani      26 ECE USA 
Sathesh      29 CSE CANADA 
Ahamed      28 ECE UK 
Gokul      29 EEE USA 

UPDATEステートメントの前に文

create table student(
    name varchar2(20), 
    age number, 
    department varchar2(3), 
    HomeCountry varchar2(10) 
    ); 

Table created. 

create table employee5(
    name varchar2(20), 
    exp number, 
    qualification varchar2(3), 
    homecountry varchar2(10) 
    ); 

Table created. 

insert into student values ('Mohan',25,'EEE','India'); 
insert into student values ('Raja',27,'EEE','India'); 
insert into student values ('Ahamed',26,'ECE','UK'); 
insert into student values ('Gokul',25,'IT','USA'); 
commit; 

insert into employee5 values ('Mohan',25,'ECE','India'); 
insert into employee5 values ('Raja',24,'IT','India'); 
insert into employee5 values ('Palani',26,'ECE','USA'); 
insert into employee5 values ('Sathesh',29,'CSE','CANADA'); 
insert into employee5 values ('Ahamed',28,'ECE','UK'); 
insert into employee5 values ('Gokul',29,'EEE','USA'); 
commit; 

を挿入し、その文句を言わないショー

1 update student s set s.age = 
    2  (select e.exp 
    3   from employee5 e 
    4   where e.name = s.name 
    5   and e.homecountry = s.homecountry 
    6* ) 
SQL>/

4 rows updated. 

SQL> select * from student; 

NAME      AGE DEP HOMECOUNTR 
-------------------- ---------- --- ---------- 
Mohan      25 EEE India 
Raja       24 EEE India 
Ahamed      28 ECE UK 
Gokul      29 IT USA 

SQL> commit; 

Commit complete. 
+0

あなたの質問に私の問題は私は学生テーブルからすべての部門の値を更新したくないということです。実際には、私はあなたがselect文のために内部で使ったのと同じWHERE条件を使う必要があります。 – tasmohan

+0

いくつかのデータを説明していただけますか?単語の要件を理解するのは少し難しいです。 –

+0

あなたが探しているものが分かりません - @ Rajeshのクエリは、あなたが尋ねたことを実行します。つまり、 'Student.uniquename = Employee.uniquenameとStudent.Homecountryという条件の下でEmployeeテーブルの修飾列の値を持つStudentテーブルのdepartment列を更新します。 = Employee.Homecountry.'すべての部署の値を更新したくない場合 - 選択した部署の値をwhere条件に追加する - '更新する生徒を設定する(..)ここで ' – Sathya

2
update student s 
    set s.age = (select e.exp 
        from employee5 e 
        where e.name = s.name 
        and e.homecountry = s.homecountry 
        and rownum < 2 
       ) 
where s.age in (select age from employee5) 

結果メッセージサブクエリはmoを返す1レコード以上