2010-05-17 20 views
6

Ich möchte Werte in einer Tabelle basierend auf entsprechenden Werten aus anderen Tabellen aktualisieren. Angenommen, Sie möchten die Preise für Teile eines bestimmten Herstellers aktualisieren, dessen Name in der Tabelle Manufacturers mit der Tabelle Pieces enthalten ist, die nur die ID des Herstellers enthält.Aktualisieren Sie eine Spalte basierend auf einem Feld aus einer anderen Tabelle

Ich habe mehrere Lösungen für MySQL here und für MS SQL Server here gesehen, aber keiner von ihnen scheint in SQLite zu funktionieren.

Irgendwelche Vorschläge?

+3

+1: Für Einfallsreichtum. Wenn nur andere die gleichen Anstrengungen unternehmen, um ihre Fragen zu untersuchen ... –

Antwort

2

Haben Sie so etwas probiert?

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

Ja, es funktioniert! Vielen Dank. Sollte nicht "erste (ID)" in der geschachtelten SELECT sein? – Sergio

+0

@OMG Ponies: Ist SQLite, nicht MySQL. Warum können nicht zwei Firmen "FooBar Inc." genannt werden? Die Eindeutigkeitseinschränkung gilt nur für die PK (id). – Sergio

+2

@Sergio: Sorry, aber Punkt steht über mögliche doppelte Daten. Die PK wäre die ID, der Name sollte eine eindeutige Einschränkung haben, vorausgesetzt, dass sie von SQLite unterstützt wird. –

0

Für SQLite gibt es keine JOIN-Funktionalität in UPDATE-Anweisungen. Die einzige Option, die Sie haben, ist corellated Subqueries zu machen:

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')); 

Das ist nicht sehr effizient ist, aber Sie können es auf Ihre Bedürfnisse anpassen.

Verwandte Themen