2011-03-28 13 views
7

Esto es un poco demasiado complicado para mi SQL-foo.Incremente una columna si ya existe una fila con los mismos valores

Lo que necesito hacer es insertar una nueva fila (que contiene 3 columnas), a menos que ya exista una fila donde dos de esos valores son los mismos, y si existe, necesito incrementar el tercer valor en esa fila.

Imagine que los dos valores son una relación (a, b) y el tercer valor es la fuerza de las relaciones (que aumenta con cada aparición de esa relación).

¡Gracias de antemano!

+0

podemos suponer que (a, b) es único para esta tabla? En particular, ¿podemos ponerle un índice único? – tloach

+0

@tloach Sí, (a, b) es siempre único para esta tabla, el valor B es único (el segundo miembro de la relación), el valor A puede aparecer varias veces. – Filipe

Respuesta

12
INSERT 
INTO a_b (a, b, strength) 
VALUES ($a, $b, 1) 
ON DUPLICATE KEY 
UPDATE strength = strength + 1 

Asegúrate de que tienes una restricción UNIQUE (a, b) o PRIMARY KEY (a, b) sobre la mesa

+0

Eso funciona con un solo valor, pero ¿qué ocurre si quiero verificar si ya existe una fila con los mismos dos valores? – Filipe

+0

@Filipe: si tiene '(1, 1)' en la tabla, insertando '(2, 1)' o '(1, 2)' se insertará, pero al insertar '(1, 1)' se actualizará. ¿No es lo que querías? – Quassnoi

Cuestiones relacionadas