2010-05-17 41 views
6

Me gustaría actualizar los valores en una tabla en función de los valores correspondientes de otras tablas. Supongamos que desea actualizar los precios de las piezas proporcionadas por un fabricante específico cuyo nombre se encuentra en la tabla Manufacturers con la tabla Pieces que solo contiene la identificación del fabricante.Actualizar una columna basada en un campo de otra tabla

He visto varias soluciones para MySQL here y para MS SQL Server here pero ninguna de ellas parece funcionar en SQLite.

¿Alguna sugerencia?

+3

+1: Para el ingenio. Si solo otros hacen el mismo esfuerzo para investigar sus preguntas ... –

Respuesta

2

¿Has probado algo como esto?

UPDATE Pieces 
SET price = 42 
WHERE manufacturer_id = (
    SELECT id 
    FROM Manufacturers 
    WHERE Name = 'FooBar Inc.' 
) 
+0

Sí, funciona! Gracias. ¿No debería ser 'first (id)' en el SELECT anidado? – Sergio

+0

@OMG Ponies: es SQLite, no MySQL. ¿Por qué no pueden ser dos compañías llamadas '' FooBar Inc.''? La restricción de exclusividad se aplica solo al PK (id). – Sergio

+2

@Sergio: Perdón por eso, pero el punto es acerca de posibles datos duplicados. El PK sería el ID, el nombre debería tener una restricción única asumida compatible con SQLite. –

0

Para SQLite no hay funcionalidad JOIN en las instrucciones UPDATE. La única opción que tiene es hacer subconsultas corellated:

UPDATE pieces 
    SET price = (SELECT SUM(price) 
       FROM manufacturers 
       WHERE pieces.manufacture_id = manufacturers.id) 
WHERE manufacture_id in (SELECT id 
         FROM manufacturers 
         WHERE name IN ('boo', 'foo')); 

Eso no es muy eficiente, pero puede ajustarlo a sus necesidades.

Cuestiones relacionadas