2010-05-17 6 views
6

Я хотел бы обновить значения в одной таблице на основе соответствующих значений из других таблиц. Предположим, вы хотите обновить цены на штуки, предоставленные одним конкретным производителем, чье имя находится в таблице Manufacturers с таблицей Pieces, содержащей только идентификатор производителя.Обновление столбца на основе поля из другой таблицы

Я видел несколько решений для MySQL here и для MS SQL Server here, но ни один из них не работает в SQLite.

Любое предложение?

+3

+1: Для находчивости. Если бы другие старались исследовать их вопросы ... –

ответ

2

Вы пробовали что-то вроде этого?

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

Да, это работает! Благодарю. Не должно быть 'first (id)' во вложенном SELECT? – Sergio

+0

@OMG Ponies: SQLite, а не MySQL. Почему не могут быть две компании под названием «FooBar Inc.»? Ограничение уникальности применяется только к PK (id). – Sergio

+2

@Sergio: Извините, но стоит о потенциальных дублированных данных. PK будет идентификатором, имя должно иметь уникальное ограничение, поддерживаемое SQLite. –

0

Для SQLite в операциях UPDATE нет функции JOIN. Единственный вариант, у вас есть, чтобы сделать коррелируется подзапросов:

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

Это не очень эффективно, но вы можете настроить его под свои нужды.

Смежные вопросы