Ver Mensaje Individual
  #13 (permalink)  
Antiguo 10/03/2015, 21:24
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error en base datos con trigger: Operand should cotain 1 column(s)

En cuanto al error que da el TRIGGER, en realidad es bastante simple, pero no tengo ni idea de como lo vas a resolver, porque yo no le veo mucho sentido al uso del trigger en si. Yo usaría un SP para realizar el INSERT y haría todo en el.
El trigger en este contexto me parece un desperdicio de recursos.

El tema es así:
Código MySQL:
Ver original
  1. UPDATE PILOTOS
  2.    SET podios = podios + 1
  3.  WHERE PILOTOS.idpiloto IN (SELECT  RESULTADOS.piloto
  4.                            FROM RESULTADOS
  5.                          WHERE RESULTADOS.idresultado IN (SELECT  MAX(RESULTADOS.idresultado)
  6.                                                             FROM RESULTADOS)
  7.                          )
  8.    AND RESULTADOS.posicion < 4;
¿Ver esa última línea con "AND RESULTADOS.posicion < 4;"?
Bueno, esa última línea está fuera de la subconsulta de la tabla RESULTADOS, por lo que en realidad pertenecería al FROM PILOTOS... que no tiene el campo POSICION.
Eso sucede porque toda subconsulta en el WHERE contenida entre paréntesis encapsula la tabla que lee, por lo que su nombre y campos resulta inaccesible para la consulta mayor.
¿Se entiende?

Ese modelo de consulta la has replicado todas las veces, por lo que está siempre mal esscrita a lo largo de todo el trigger.

Para que no de error debería ser mas o menos así:

Código MySQL:
Ver original
  1. UPDATE PILOTOS
  2.    SET podios = podios + 1
  3.  WHERE PILOTOS.idpiloto IN (SELECT  RESULTADOS.piloto
  4.                            FROM RESULTADOS
  5.                          WHERE RESULTADOS.idresultado IN (SELECT  MAX(RESULTADOS.idresultado)
  6.                                                             FROM RESULTADOS)
  7.                                       AND RESULTADOS.posicion < 4);
Pero la verdad no sé si eso cumple con la lógica que buscas. Eso lo tendrás que analziar tu.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)