Estoy tratando de actualizar el valor de una columna en un grupo de filas en una tabla utilizando ACTUALIZAR. El problema es que necesito usar una subconsulta para derivar el valor para esta columna, y depende de la misma tabla. Aquí está la consulta:ACTUALIZACIÓN SQL con sub-consulta que hace referencia a la misma tabla en MySQL
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';
Normalmente si el maestro y el estudiante estaban en 2 tablas diferentes, MySQL ¿No se quejan. Pero ya que ambas utilizan la misma tabla, MySQL arroja este error en su lugar:
ERROR 1093 (HY000): No se puede especificar la tabla de destino 'estudiante' para la actualización en la cláusula DE
¿Hay ¿De alguna manera puedo forzar a mysql a hacer la actualización? Estoy 100% seguro de que la cláusula from no se verá afectada a medida que se actualicen las filas.
Si no, ¿hay alguna otra forma en que pueda escribir esta actualización sql para lograr el mismo efecto?
Gracias!
EDIT: Creo que tengo que trabajar:
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';
Sería bueno si había dos soluciones: la específica y uno un poco más abstracto, con más claros los nombres de tablas y columnas, para simplificar la lectura para las personas que buscan para una respuesta general, como yo.En cualquier caso, tanto la pregunta como la respuesta me satisfacen, pero lo sugerí para una mejor comprensión de la comunidad. Gracias, y +1 a ambos – Nico
Totalmente de acuerdo con @Nico en esto. Es por eso que proporcioné un ejemplo abstracto con nombres de tabla y columna más claros (http://stackoverflow.com/a/23772515/886539). También volví a votar la respuesta de John Hartsock (me ayudó mucho a crear mi ejemplo). –