Declaración de selección de subconsulta de MySQL dentro de la consulta de actualización

Tengo 2 tablas: tbl_taxclasses, tbl_taxclasses_regions

Esta es una relación de uno a muchos, donde el ID de registro principal es classid. Tengo una columna dentro de la primera tabla llamada regionscount

Entonces, creo una Clase de impuesto, en la tabla 1. Luego agrego regiones / estados en la tabla 2, asignando el classid a cada región.

Realizo una instrucción SELECT para contar las regiones con ese mismo classid, y luego realizo una instrucción UPDATE en tbl_taxclasses con ese número. Actualizo el regionscount columna.

Esto significa que estoy escribiendo 2 consultas. Lo cual está bien, pero me preguntaba si había una manera de hacer una instrucción SELECT dentro de la instrucción UPDATE, como esta:

UPDATE `tbl_taxclasses` SET `regionscount` = [SELECT COUNT(regionsid) FROM `tbl_taxclasses_regions` WHERE classid = 1] WHERE classid = 1

Estoy llegando aquí, ya que no estoy seguro de cuán robusto es MySQL, pero tengo la última versión, a partir de hoy. (5.5.15)

preguntado el 27 de agosto de 11 a las 18:08

2 Respuestas

Puede usar una subconsulta no correlacionada para hacer el trabajo por usted:

UPDATE 
    tbl_taxclasses c 
INNER JOIN (
    SELECT 
        COUNT(regionsid) AS n 
     FROM 
        tbl_taxclasses_regions 
     GROUP BY 
        classid
) r USING(classid) 
SET 
    c.regionscount = r.n
WHERE
    c.classid = 1

Respondido 27 ago 11, 23:08

Resulta que en realidad estaba adivinando bien.

Esto funciona:

 UPDATE `tbl_taxclasses` 
 SET `regionscount` = (
      SELECT COUNT(regionsid) AS `num` 
      FROM `tbl_taxclasses_regions` 
      WHERE classid = 1) 
 WHERE classid = 1 LIMIT 1

Solo necesitaba reemplazar mis corchetes [] con paréntesis ().

respondido 12 nov., 13:13

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.