[SQL] 하위 쿼리와 SQL의 UPDATE 그 참조 MySQL은 같은 테이블
SQL하위 쿼리와 SQL의 UPDATE 그 참조 MySQL은 같은 테이블
나는 UPDATE를 사용하여 테이블의 행 무리의 열 값을 업데이트하는 것을 시도하고있다. 문제는 내가이 칼럼에 대한 값을 도출하기 위해 하위 쿼리를 사용할 필요가있다, 그것은 같은 테이블에 따라 달라집니다. 다음 쿼리는 다음과 같습니다
UPDATE user_account student
SET student.student_education_facility_id = (
SELECT teacher.education_facility_id
FROM user_account teacher
WHERE teacher.user_account_id = student.teacher_id AND teacher.user_type = 'ROLE_TEACHER'
)
WHERE student.user_type = 'ROLE_STUDENT';
교사와 학생이 개 서로 다른 테이블에 있던 보통하면, MySQL은 불평하지 않을 것이다. 그러나 그들은 모두 동일한 테이블을 사용하고 있기 때문에, 대신에이 오류 밖으로 MySQL의 결선 :
ERROR 1093 (HY000) : 당신은 FROM 절에서 업데이트 '학생'을 목표 테이블을 지정할 수 없습니다
업데이트를 할 내가 MySQL을 강제 할 수있는 방법이 있습니까? 나는 행이 업데이트로 100 % 긍정적이 절에서 영향을받지 않습니다입니다.
그렇지 않은 경우, 나는이 같은 영향을 달성하기 위해이 업데이트 SQL을 쓸 수있는 또 다른 방법은 무엇입니까?
감사!
편집 : 나는 일에 거 같아요 :
UPDATE user_account student
LEFT JOIN user_account teacher ON teacher.user_account_id = student.teacher_id
SET student.student_education_facility_id = teacher.education_facility_id
WHERE student.user_type = 'ROLE_STUDENT';
해결법
-
==============================
1.당신을 위해 일부 참조 http://dev.mysql.com/doc/refman/5.0/en/update.html
당신을 위해 일부 참조 http://dev.mysql.com/doc/refman/5.0/en/update.html
UPDATE user_account student INNER JOIN user_account teacher ON teacher.user_account_id = student.teacher_id AND teacher.user_type = 'ROLE_TEACHER' SET student.student_education_facility_id = teacher.education_facility_id
-
==============================
2.명확 테이블 및 열 이름을 가진 추상 예 :
명확 테이블 및 열 이름을 가진 추상 예 :
UPDATE tableName t1 INNER JOIN tableName t2 ON t2.ref_column = t1.ref_column SET t1.column_to_update = t2.column_desired_value
@Nico에 의해 제안
이 도움말 사람을 바랍니다.
-
==============================
3.
UPDATE user_account SET (student_education_facility_id) = ( SELECT teacher.education_facility_id FROM user_account teacher WHERE teacher.user_account_id = teacher_id AND teacher.user_type = 'ROLE_TEACHER' ) WHERE user_type = 'ROLE_STUDENT'
위 샘플 업데이트 쿼리입니다 ...
당신은 업데이트 SQL 문을 사용하여 하위 쿼리를 작성할 수 있으며, 해당 테이블에 대한 별명을 제공 할 필요가 없습니다. 서브 쿼리 테이블에 별칭 이름을 지정합니다. 나는 시도하고 나를 위해 잘 작동 것 ....
-
==============================
4.
UPDATE user_account student SET (student.student_education_facility_id) = ( SELECT teacher.education_facility_id FROM user_account teacher WHERE teacher.user_account_id = student.teacher_id AND teacher.user_type = 'ROLE_TEACHER' ) WHERE student.user_type = 'ROLE_STUDENT';
-
==============================
5.나는 SQL 서버에 대해이 필요했습니다. 여기있어:
나는 SQL 서버에 대해이 필요했습니다. 여기있어:
UPDATE user_account SET student_education_facility_id = cnt.education_facility_id from ( SELECT user_account_id,education_facility_id FROM user_account WHERE user_type = 'ROLE_TEACHER' ) as cnt WHERE user_account.user_type = 'ROLE_STUDENT' and cnt.user_account_id = user_account.teacher_id
나는 다른 RDBMS에서 (제발 확인)와 함께 작동합니다 생각합니다. 나는 구문처럼은 확장 때문입니다.
필요한 포맷 사실이 있었다 :
UPDATE table1 SET f1 = cnt.computed_column from ( SELECT id,computed_column --can be any complex subquery FROM table1 ) as cnt WHERE cnt.id = table1.id
-
==============================
6.
UPDATE user_account student, ( SELECT teacher.education_facility_id as teacherid FROM user_account teacher WHERE teacher.user_account_id = student.teacher_id AND teacher.user_type = 'ROLE_TEACHER' ) teach SET student.student_education_facility_id= teach.teacherid WHERE student.user_type = 'ROLE_STUDENT';
from https://stackoverflow.com/questions/4268416/sql-update-with-sub-query-that-references-the-same-table-in-mysql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL은 / SQL 텍스트 필드의 처음 40 개 문자를 검색? (0) | 2020.05.23 |
---|---|
[SQL] 날짜에서 시간을 제거하는 방법 (0) | 2020.05.23 |
[SQL] MySQL의 GROUP_CONCAT 중복 (0) | 2020.05.23 |
[SQL] 오라클의 FROM 절없이 선택 (0) | 2020.05.23 |
[SQL] 포스트 그레스에서 여러 행으로 분할 열 (0) | 2020.05.23 |