Запрос на обновление использует одинаковое значение для каждой строки - PullRequest
1 голос
/ 29 ноября 2011

У меня есть база данных SQLite, которую необходимо обновить. С помощью оператора update это должно быть легко.

Но все идет не так, как планировалось:

Это полный запрос:

UPDATE products_new SET name =   
(
  SELECT products_sap.title 
  FROM products_sap, products_new 
  WHERE products_sap.id_a = products_new.product_id
);

Как часть моей схемы отладки, я пробую каждый (под) запрос.

Этот запрос (идентичный тому, который использовался в приведенном выше обновлении) показывает мне правильные записи:

SELECT products_sap.id, products_sap.title 
FROM products_sap, products_new 
WHERE products_sap.id_a = products_new.product_id;

Пример:

id | title
----------------------
 1 | Lorum Ipsum
 2 | Lorum Not Ipsum
 3 | Ipsum Lorum

Но : все мои строки в обновленной таблице имеют идентичные name значения * удушья *.

SELECT products_new.name from products_new;
* * Пример тысяча двадцать-один: * * 1 022
id | name
----------------------
 1 | Lorum Ipsum
 2 | Lorum Ipsum
 3 | Lorum Ipsum

Итак, мой вопрос: как я могу обновить каждую строку с ее значением name?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

Я не совсем знаком с SQLite, но вы можете сделать что-то вроде следующего на других диалектах:

UPDATE products_new SET name = products_sap.title
   FROM products_new 
   INNER JOIN  products_sap 
   ON products_new.product_id = products_sap.id_a
0 голосов
/ 29 ноября 2011

Это происходит потому, что таблица products_new во внутреннем запросе скрывает таблицу products_new в предложении UPDATE.Таким образом, вы фактически никогда не присоединяете строки из таблицы, которую вы обновляете.

Вы должны убедиться, что для каждой строки, которую вы пытаетесь обновить, ее идентификатор (product_id) объединяется с таблицей (products_sap), который содержит новое значение:

UPDATE products_new x 
SET name = (SELECT products_sap.title 
            FROM products_sap 
            WHERE products_sap.id_a = x.product_id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...