2010-05-17 3 views
6

Chciałbym zaktualizować wartości w jednej tabeli na podstawie odpowiednich wartości z innych tabel. Załóżmy, że chcesz zaktualizować ceny części dostarczonych przez jednego konkretnego producenta, którego nazwa znajduje się w tabeli Manufacturers z tabelą Pieces zawierającą tylko identyfikator producenta.Zaktualizuj kolumnę na podstawie pola z innej tabeli

Widziałem kilka rozwiązań dla MySQL here i dla serwera MS SQL Server here, ale żaden z nich nie działa w SQLite.

Jakieś sugestie?

+3

+1: Za zaradność. Jeśli tylko inni wkładają ten sam wysiłek w badanie swoich pytań ... –

Odpowiedz

2

Próbowałeś czegoś takiego?

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

Tak, to działa! Dzięki. Czy nie powinno być 'first (id)' w zagnieżdżonym SELECT? – Sergio

+0

@OMG Kuce: Jest SQLite, nie MySQL. Dlaczego dwie firmy nie mogą mieć nazwy "FooBar Inc."? Ograniczenie unikalności dotyczy tylko PK (id). – Sergio

+2

@Sergio: Przepraszam, ale punkt oznacza potencjalne duplikaty danych. PK będzie identyfikatorem, nazwa powinna mieć unikalne ograniczenie zakładające obsługę SQLite. –

0

Dla SQLite nie ma funkcji JOIN w instrukcjach UPDATE. Jedyną dostępną opcją jest utworzenie podkompilowanych podkwerend:

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

To nie jest bardzo wydajne, ale można je dostosować do swoich potrzeb.