Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Error en base datos con trigger: Operand should cotain 1 column(s)

Estas en el tema de Error en base datos con trigger: Operand should cotain 1 column(s) en el foro de Mysql en Foros del Web. Hola tengo un problema con una base datos a ver si alguien me puede ayudar cuando cargo el trigger (sin errores) no me deja insertat ...
  #1 (permalink)  
Antiguo 10/03/2015, 13:47
 
Fecha de Ingreso: marzo-2015
Mensajes: 6
Antigüedad: 9 años, 1 mes
Puntos: 0
Error en base datos con trigger: Operand should cotain 1 column(s)

Hola tengo un problema con una base datos a ver si alguien me puede ayudar
cuando cargo el trigger (sin errores) no me deja insertat los inserts (datos) en la base de datos, si no introduzco el trigger me deja insertar los datos.



Error:



Esquema:
http://freetexthost.com/itg5knrigb

Triggers
http://freetexthost.com/3e4qxupjfx

Inserts
http://freetexthost.com/nvjllx3ylq


resumen de trigger

Código SQL:
Ver original
  1. UPDATE PILOTOS
  2. SET segundospuestos = segundospuestos + 1
  3. WHERE PILOTOS.idpiloto IN (SELECT RESULTADOS.piloto, RESULTADOS.posicion
  4. FROM RESULTADOS
  5. WHERE RESULTADOS.idresultado IN (SELECT MAX(RESULTADOS.idresultado)
  6. FROM RESULTADOS))
  7. AND RESULTADOS.posicion = 2;

Última edición por gnzsoloyo; 10/03/2015 a las 14:15
  #2 (permalink)  
Antiguo 10/03/2015, 14:18
Avatar de 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)

Cita:
Operand should cotain 1 column(s)
¿Y cuál es la parte que no se enteiende de ese mensaje?

Dice: "El operando debe contener una columna".
Obviamente estás cometiendo un error en la query, donde una columna recibe más de un valor...

Es un error bastante evidente con solo mirar tu consulta:
Código SQL:
Ver original
  1. UPDATE PILOTOS
  2.    SET segundospuestos = segundospuestos + 1
  3.  WHERE PILOTOS.idpiloto IN (SELECT RESULTADOS.piloto, RESULTADOS.posicion
  4.                               FROM RESULTADOS
  5.                              WHERE RESULTADOS.idresultado IN (SELECT MAX (RESULTADOS.idresultado)
  6.                                                                 FROM RESULTADOS))
  7.    AND RESULTADOS.posicion = 2;
ya que estás comparando PILOTOS.idpiloto contra el resultado de una subconsulta que devuelve DOS COLUMNAS, no lugar de una.
Código SQL:
Ver original
  1. SELECT RESULTADOS.piloto, RESULTADOS.posicion
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 10/03/2015, 16:15
 
Fecha de Ingreso: marzo-2015
Mensajes: 6
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Error en base datos con trigger: Operand should cotain 1 column(s)

Hola gnzsoloyo

en otra web un amiguete me comento que debria de tener las dos

Cita:
A mi SQL no se me da muy bien, pero lo que yo veo, tienes esto:
Código:
UPDATE PILOTOS
SET segundospuestos = segundospuestos + 1
WHERE PILOTOS.idpiloto IN (SELECT RESULTADOS.piloto
FROM RESULTADOS
WHERE RESULTADOS.idresultado IN (SELECT MAX(RESULTADOS.idresultado)
FROM RESULTADOS))
AND RESULTADOS.posicion = 2;
Estan todos los triggers por el estilo, en el ultimo AND intentas pillar de resultados.posicion, pero luego en el SELECT no lo seleccionas. Tal que así tendrias que hacer:

Código:
UPDATE PILOTOS
SET segundospuestos = segundospuestos + 1
WHERE PILOTOS.idpiloto IN (SELECT RESULTADOS.piloto, RESULTADOS.posicion
FROM RESULTADOS
WHERE RESULTADOS.idresultado IN (SELECT MAX(RESULTADOS.idresultado)
FROM RESULTADOS))
AND RESULTADOS.posicion = 2;


originalmente era asi:


Error:



Esquema:
http://freetexthost.com/itg5knrigb

Triggers
http://freetexthost.com/4p1ilrc124

Inserts
http://freetexthost.com/nvjllx3ylq

lo cierto es que no se me da nada bien esto pido perdon por las tonterias que haga por aqui xd
  #4 (permalink)  
Antiguo 10/03/2015, 16:21
Avatar de 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)

Pues tu amigo no sabe de SQL, entonces...

Para que puedas tomar los dos valores del subselect deben ser comaprados con dos valores en grupo:
Código MySQL:
Ver original
  1. UPDATE PILOTOS
  2.    SET segundospuestos = segundospuestos + 1
  3.  WHERE (idpiloto, posicion) IN (SELECT piloto, posicion
  4.                               FROM RESULTADOS
  5.                              WHERE idresultado IN (SELECT MAX (R.idresultado)
  6.                                                                 FROM RESULTADOS R))
  7.    AND posicion = 2;

Aunque yo la simplificaría un poco:
Código MySQL:
Ver original
  1. UPDATE PILOTOS
  2.    SET segundospuestos = segundospuestos + 1
  3.  WHERE (idpiloto, posicion) IN (SELECT piloto, posicion
  4.                                   FROM RESULTADOS
  5.                               ORDER BY idresultado DESC
  6.                                  LIMIT 1)
  7.    AND posicion = 2;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 10/03/2015, 16:34
 
Fecha de Ingreso: marzo-2015
Mensajes: 6
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Error en base datos con trigger: Operand should cotain 1 column(s)

MUCHAS GRACIAS DE NUEVO!

Me sigue dando error te pongo una captura del error que me devuelve



la opcion simplificada no me funciona dado que mi version de sql no soporta nosequé (se me ha olvidado hacer una captura)


nuevamente gracias y disculpas por mi torpez.
  #6 (permalink)  
Antiguo 10/03/2015, 16:50
 
Fecha de Ingreso: marzo-2015
Mensajes: 6
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Error en base datos con trigger: Operand should cotain 1 column(s)

he probado a quitar un espacio entre max y el parentesis, asi

DROP TRIGGER IF EXISTS CONTADOR;
DELIMITER |
CREATE TRIGGER CONTADOR AFTER INSERT ON RESULTADOS FOR EACH ROW
BEGIN
UPDATE PILOTOS
SET segundospuestos = segundospuestos + 1
WHERE (idpiloto, posicion) IN (SELECT piloto, posicion
FROM RESULTADOS
WHERE idresultado IN (SELECT MAX(RESULTADOS.idresultado)
FROM RESULTADOS))
AND posicion = 2;


END |
DELIMITER ;


  #7 (permalink)  
Antiguo 10/03/2015, 16:51
Avatar de 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)

Quita el espacio en blanco entre el MAX y el paréntesis.
MySQL no los admite.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 10/03/2015, 16:52
 
Fecha de Ingreso: marzo-2015
Mensajes: 6
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Error en base datos con trigger: Operand should cotain 1 column(s)

si me he dado cuenta , lo he probado, mira el post anterior al tuyo ;)
  #9 (permalink)  
Antiguo 10/03/2015, 16:53
Avatar de 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)

La columna "posicion" no existe en una de las dos tablas.
Verifica el nombre.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 10/03/2015, 16:53
Avatar de 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)

Cita:
Iniciado por aliasruben Ver Mensaje
si me he dado cuenta , lo he probado, mira el post anterior al tuyo ;)
Mira la hora de mi post. ..
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 10/03/2015, 16:59
 
Fecha de Ingreso: marzo-2015
Mensajes: 6
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Error en base datos con trigger: Operand should cotain 1 column(s)

siento si ha sonado maleducado solo queria decir que lo he probado y sigue dando error (el mimo que el del principio por lo que veo)

sobre las tablas

mira:

  #12 (permalink)  
Antiguo 10/03/2015, 21:08
Avatar de 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)

Mira, tomé los scripts y los cargué en mi PC, y en realidad hay unos cuantos errores de proceso, más allá de los que pueda contener el TRIGGER.
- No estás respetando las dependencias de FK->PK, ñas tablas dependientes deben ser cargadas después de las base, cosa que no se está cumpliendo.
- En al menos una tabla no estás enviando los valores necesarios. Hay al menos una columna NOT NULL a la que no le envías datos.
- En algunos casos se están enviando cadenas de texto que exceden el tamaño de la columna.

Código MySQL:
Ver original
  1. INSERT INTO NACIONALIDADES(codigo,nacionalidad) VALUES  ('SPA','Espana'), ('ITA','italia'), ('GBR','inglaterra'), ('GER','alemania'), ('USA','eeuu'), ('JPN','japon'), ('COL','colombia'), ('CZE','República Checa'), ('RSM','República de San Marino'), ('FRA','francia'), ('AUS','australia'), ('SWI','suiza'), ('BEL','belgica'), ('MAL','malasia'), ('THA','thailandia'), ('FIN','finlandia'), ('POR','portugal'), ('NED','paises bajos'), ('RSA','sudafrica'), ('VEN','venezuela'), ('ARG','argentina'), ('QAT','qatar')
Error Code: 1406. Data too long for column 'nacionalidad' at row 8

Código MySQL:
Ver original
  1. INSERT INTO PILOTOS (dorsal,nombre,categoria,moto,escuderia,nacionalidad) VALUES (93,'Marc MARQUEZ','motogp',3,13,1), (46,'Valentino ROSSI','motogp',2,9,2), (99,'Jorge LORENZO','motogp',2,9,1), (26,'Dani PEDROSA','motogp',3,13,1), (44,'Pol ESPARGARO','motogp',3,49,1), (4,'Andrea DOVIZIOSO','motogp',1,5,2), (41,'Aleix ESPARGARO','motogp',14,32,1), (38,'Bradley SMITH','motogp',3,49,3), (6,'stefan BRADL','motogp',2,24,4), (4,'Andrea IANNONE','motogp',1,5,2), (19,'Alvaro BAUTISTA','motogp',3,50,1), (45,'Scott REDDING','motogp',3,38,3), (35,'Cal CRUTCHLOW','motogp',3,6,3), (7,'Hiroshi AOYAMA','motogp',34,56,6), (68,'Yonny HERNANDEZ','motogp',1,12,7), (69,'Nicky HAYDEN','motogp',3,4,5), (17,'Karel ABRAHAM','motogp',3,2,8), (8,'Hector BARBERA','motogp',1,1,1), (70,'Michele PIRRO','motogp',34,56,2), (9,'Danilo PETRUCCI','motogp',1,12,2), (23,'Broc PARKES','motogp',34,56,3), (11,'Sandro CORTESE','motogp',34,56,4), (5,'Colin EDWARDS','motogp',34,56,4), (70,'michael Laverty','motogp',34,56,4), (63,'Mike DI MEGLIO','motogp',34,56,4), (15,'Alex DE ANGELIS','moto2',34,56,4), (21,'Katsuyuki NAKASUGA','motogp',34,56,4), (12,'Thomas LUTHI','moto2',14,19,12), (53,'Esteve Rabat','moto2',14,20,1), (5,'Johann ZARCO','moto2',14,17,10), (39,'Luis SALOM','moto2',14,26,1), (19,'Xavier LEON','moto2',34,56,1), (77,'Dominique AEGERTER','moto2',14,22,12), (22,'Sam LOVES','moto2',34,56,3), (23,'Marcel Schrotter','moto2',16,32,4), (95,'Anthony wEST','moto2',21,28,11), (7,'Lorenzo Baldassarri','moto2',14,10,3), (81,'Jordi TORRES','moto2',34,56,1), (88,'Ricard CARDUS','moto2',32,16,1), (94,'jonas FOLGER','moto2',14,15,3), (30,'Takaaki NAKAGAMI','moto2',14,21,6), (98,'Louis ROSSI','moto2',16,31,10), (55,'Hafizh Syahrin','moto2',14,27,14), (70,'Robin Mulhauser','moto2',14,33,12), (18,'Nicolas TEROL','moto2',34,56,1), (14,'Ratthapark WILAIROT','moto2',34,56,4), (44,'Roberto ROLFO','moto2',34,56,1), (21,'Franco MORBIDELLI','moto2',14,22,3), (4,'Randy KRUMMENACHER','moto2',14,23,12), (20,'Florian MARINO','moto2',34,56,2), (8,'Gino REA','moto2',14,16,3), (97,'Roman RAMOS','moto2',34,56,2), (45,'Tetsuia NAGASHIMA','moto2',14,23,6), (25,'Azlan SHAH','moto2',14,21,14), (10,'Thitioonc VVAROKORN','moto2',34,56,4), (54,'Mattia Pasini','moto2',34,56,2), (90,'Lucas MAMAS','moto2',34,56,1), (80,'Julian SIMON','moto2',30,28,1), (49,'Axel PONS','moto2',14,15,1), (40,'lAavenck VIÑALES','moto2',34,56,1), (38,'Mika KALLIO','moto2',14,20,16), (3,'Simone CORSI','moto2',34,56,1), (15,'Alex DE ANGELIS','moto2',34,56,4), (8,'Jack MILLER','moto3',3,3,11), (32,'Isaac VIñALES','moto3',29,51,1), (12,'Alex MARqUEZ','moto3',14,20,1), (52,'Dannxy KENT','moto3',3,52,3), (42,'Alex RINS','moto3',14,26,1), (7,'Efren VAZOUEZ','moto3',3,52,1), (23,'Niccolò Antonelli','moto3',3,42,3), (44,'miguel OLIVEIRA','moto3',27,43,17), (41,'Brad BINDER','moto3',27,43,19), (98,'Karel HANIKA','moto3',27,43,8), (33,'Enea BASTIANINI','moto3',3,53,3), (10,'Alexis MASBOU','moto3',3,46,10), (84,'Jakub KORNFEIL','moto3',27,54,8), (5,'Romano FENATI','moto3',27,47,3), (53,'Juanfran GUEVARA','moto3',30,41,1), (21,'Francesco BAGNAIA','moto3',30,41,3), (17,'John MCPHEE','moto3',3,41,3), (18,'Andrea MIGNO','moto3',27,47,3), (83,'Zulfahmi KHAIRUDDIN','moto3',27,54,14), (13,'Jasper IWEMA','moto3',34,56,1), (19,'Alessandro TONuCCI','moto3',30,55,3), (43,'Luna GRONWALD','moto3',34,56,3), (38,'Hafla A7_MI','moto3',34,56,3), (4,'Gabriel RAMOS','moto3',34,56,1), (3,'Matteo FERRARI','moto3',30,45,3), (55,'Andrea LOCATELLI','moto3',3,53,3), (6,'Maria herrera','moto3',29,51,1), (14,'Albert ARENAS','moto3',34,56,1), (31,'Niklas AJO','moto3',27,35,16), (99,'Jorge NAVARRO','moto3',3,38,1), (9,'Scott DEROUE','moto3',34,56,3), (95,'Jules DANILO','moto3',3,42,10), (91,'Gabriel RODRIGO','moto3',27,35,21), (85,'Philipp Oettl','moto3',27,19,4), (11,'livio lol','moto3',34,56,1), (61,'Arthur SISSIS','moto3',34,56,1), (57,'ERIC GRANADO','moto3',34,56,1)
Error Code: 1364. Field 'puntos' doesn't have a default value
Código MySQL:
Ver original
  1. INSERT INTO CIRCUITOS(nombre,nacionalidad) VALUES  ('Losail Circuit',22), ('Circuit Of The Americas',5), ('Autódromo Termas de Río Hondo',21), ('Jerez',1), ('Le Mans',10), ('Mugello',2), ('Circuit de Barcelona-Cataluny',1), ('Assen',18), ('Sachsenring',4), ('Indianapolis Motor Speedway',5), ('Brno',8), ('Donington Park',9), ('Misano',2), ('MotorLand Aragón',1), ('Motegi',6), ('Phillip Island',11), ('Sepang Circuit',14), ('Comunitat Valenciana',1)
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`motoristas`.`circuitos`, CONSTRAINT `FK1nacionalidad` FOREIGN KEY (`nacionalidad`) REFERENCES `nacionalidades` (`idnacionalidad`) ON DELETE NO ACTION ON UPDATE CASCADE)
Código MySQL:
Ver original
  1. INSERT INTO GRANDESPREMIOS (nombrecompleto,nombrereducido,codigogp,circuito,polesmgp,polesm2,polesm3) VALUES  ('commercial bank grand prix of Qatar','Qatar','QAT',1,1,27,60), ('RED BULL GRAND PRIX OF THE AMERICAS','Las Américas','AME',2,1,58,60), ('G.P. Red Bull de la República Argentina','Argentina','ARG',3,1,27,73), ('Gran Premio bwin de España','España','SPA',4,1,59,73), ('Monster Energy Grand Prix de France','Francia','FRA',5,1,59,60), ('Gran Premio dItalia TIM','Italia','ITA',6,1,27,73), ('GP monster Energy de Catalunya','Cataluña','CAT',7,1,27,62), ('Iveco Daily TT Assen','Países Bajos ','NED',8,1,34,62), ('eni Motorrad Gran Prix Deutschland','Alemania','GER',9,1,31,60), ('Red Bull Indianápolis Grand Prix','Indianápolis','INP',10,1,59,65), ('bwin Grand Prix teské Republiky','República Checa','CZE',11,4,27,71), ('HERTZ BRITISH GRAND PRIX','Gran Bretanya','CZE',12,1,27,64), ('GP TIM DI SAN MARINO E DELLA RIVIERA DI RIMINI','Republica de San Marino','RSM',13,2,27,64), ('Gran Premio Movistar de Aragón','Aragón','ARA',14,3,58,73), ('Motul Grand Prix of tapan','Japón','JPN',15,3,26,62), ('Tissot Australian Grand Prix','Australia','AUS',16,2,58,60), ('Shell Advance Malasyan Motorcycle GP','Malasia','MAL',17,1,58,65), ('GP GENERALI DE LA COMUNITAT VALENCIANA','Valencia','SPA',18,1,26,60)
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`motoristas`.`grandespremios`, CONSTRAINT `FK1premiocircuito` FOREIGN KEY (`circuito`) REFERENCES `circuitos` (`idcircuito`) ON DELETE NO ACTION ON UPDATE CASCADE)

Código MySQL:
Ver original
  1. INSERT INTO RESULTADOS (premio,piloto,posicion,tiempo) VALUES  (1,1,1,'42.40.561'), (1,2,2,'+0.259'), (1,4,3,'+3.370'), (1,7,4,'+11.623'), (1,10,5,'+12.159'), ...
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`motoristas`.`resultados`, CONSTRAINT `FK1piloto` FOREIGN KEY (`piloto`) REFERENCES `pilotos` (`idpiloto`) ON DELETE NO ACTION ON UPDATE CASCADE)

Código MySQL:
Ver original
  1. INSERT INTO RESULTADOS (premio,piloto,posicion,tiempo) VALUES  (1,29,1,''), (1,62,2,''), (1,28,3,''), (1,61,4,''), (1,63,5,''), (1,34,6,''), (1,22,7,''), (1,38,8,''), ...
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`motoristas`.`resultados`, CONSTRAINT `FK1piloto` FOREIGN KEY (`piloto`) REFERENCES `pilotos` (`idpiloto`) ON DELETE NO ACTION ON UPDATE CASCADE)

Código MySQL:
Ver original
  1. INSERT INTO RESULTADOS (premio,piloto,posicion,tiempo) VALUES  (1,64,1,''), (1,66,2,''), (1,69,3,''), (1,71,4,''), (1,68,5,''), (1,76,6,''), (1,75,7,''), (1,65,8,''), ...
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`motoristas`.`resultados`, CONSTRAINT `FK1piloto` FOREIGN KEY (`piloto`) REFERENCES `pilotos` (`idpiloto`) ON DELETE NO ACTION ON UPDATE CASCADE)

Es probable que los fallos de inserciones por dependencia se produzcan como cascada por no haber sido exitosa una de las primeras inserciones.
Es complicado validar los datos en estas condiciones, porque son INSERTs masivos.
Yo lo que haría se´ria verificar una a una las inserciones para ver donde falla, y luego pasar a la siguiente.

El trigger puede esperar. Si nlos datos no se insertan, no hay que pueda ejecutase.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 10/03/2015, 21:24
Avatar de 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)

Etiquetas: select, trigger, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:41.