Обновить значение столбца, если другие значения столбца совпадают - PullRequest
0 голосов
/ 22 апреля 2019

enter image description here

Проблема в том, что StudentId в строке № 2 должен быть равен 1, поскольку их имя и имя отца совпадают.Точно так же StudentId в строке № 4 должно быть 3, потому что имя и имя отца совпадают

Я изменил свой запрос в соответствии с моим требованием, так как мне нужно обновить свой student_id, когда имя_ студента, студенческое досье, отец студента, электронная почта countryIdи идентификатор скайпа будет таким же, теперь обновленный запрос будет

  Merge into student_new_Backup
     using ( select min(student_id) as stid, student_name, student_father,student_dob,email_id,skype_id,country
             from student_new_Backup 
              group by student_name, student_father,student_dob,email_id,skype_id,country) a
     on (student_new_Backup.student_name= a.student_name
          and student_new_Backup.student_father=a.student_father
          and student_new_Backup.student_dob=a.student_dob
unfortunately no student_id is update
          and student_new_Backup.email_id=a.email_id
          and student_new_Backup.skype_id=a.skype_id
          and student_new_Backup.country=a.country)
      when matched then 
           UPDATE SET student_new_Backup.student_id=a.stid
           ;
           commit;

к сожалению, не Student_id не обновляется

Ответы [ 2 ]

3 голосов
/ 22 апреля 2019

Я думаю, что вы хотите:

update t
    set studentId = (select min(t2.studentId)
                     from t t2
                     where t2.name = t.name and t2.fathername = t.fathername
                    );

РЕДАКТИРОВАТЬ:

Если вы хотите NULL безопасных сравнений, то вам нужно быть явным:

update t
    set studentId = (select min(t2.studentId)
                     from t t2
                     where (t2.name = t.name or t2.name is null and t.name is null) and
                           (t2.fathername = t.fathername or t2.fathername is null and t.fathername is null)
                    );
2 голосов
/ 22 апреля 2019

вы можете использовать слияние для обновления

 Merge into table_name
 using ( select min(studentId) as stid, Name, fathername
         from table_name 
          group by Name, fathername) a
 on (table_name.Name= a.Name
      and table_name.fatherName=a.fatherName)
  when matched then 
       UPDATE SET table_name.studentId=a.stid

онлайн демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...