Обновление с помощью соединения в SQLite
У меня есть 2 таблицы и мне нравится обновлять один из них значениями из другого.
software
---------
id ,
purchprice
softwarecost
------------
id ,
purchprice
Я пробовал эти запросы, но SQLite не поддерживает JOINS с UPDATE.anybody, кто может придумать запрос для this.thanks для вашей помощи.
UPDATE software
SET software.purchprice=softwarecost.purchprice
WHERE software.id=softwarecost.id
UPDATE software
INNER JOIN softwarecost on software.id=softwarecost.id
SET software.purchprice=softwarecost.purchprice
Ответы
Ответ 1
Это будет работать
UPDATE
software
SET purchprice = (SELECT purchprice
FROM softwarecost
WHERE id = software.id)
where EXISTS (SELECT purchprice
FROM softwarecost
WHERE id = software.id)
Здесь мы используем, потому что
без этого запрос установит значение параметра software.purchprice равным null, если не найдена "коррелированная" строка.
Ответ 2
Вы должны найти соответствующие значения с помощью коррелированного подзапроса:
UPDATE software
SET purchprice = (SELECT purchprice
FROM softwarecost
WHERE id = software.id)
Ответ 3
Эта инструкция будет работать нормально!
Он обновит только строки в "программном обеспечении", которые имеют одинаковый идентификатор в "softwarecost"!
UPDATE software SET software.purchprice =
(SELECT purchprice FROM softwerecost WHERE software.id = softwerecost.id)
WHERE id IN (SELECT id FROM softwarecost);
Еще один способ сделать это:
DELETE FROM software WHERE id IN (SELECT id FROM softwarecost);
INSERT INTO software SELECT * FROM softwarecost;
... этот способ более удобен, если вам нужно обновить все столбцы (если у вас больше столбцов для обновления)
Ответ 4
Carter, проблема с → рядом с "s": синтаксическая ошибка < < речь идет об использовании ALIAS. Команда UPDATE не принимает ALIAS. Если вы попробуете bogdan tip о REPLACE, вы можете сделать объединение в предложение SELECT.
Ответ 5
Здесь нет JOIN:
UPDATE software SET software.purchprice=softwarecost.purchprice WHERE software.id=softwarecost.id
Это не сработает:
UPDATE software s INNER JOIN softwarecost sc on s.id=sc.id SET s.purchprice=sc.purchprice
SQLite действительно не поддерживает JOIN в запросах UPDATE http://sqlite.org/lang_update.html
Как насчет использования REPLACE?
Возможно, вы могли:
REPLACE INTO software SELECT id, purchprice FROM softwarecost
Ответ 6
Вы можете попробовать как дано,
UPDATE software SET purchprice = (SELECT purchprice FROM softwarecost a WHERE a.id =software.id) where purchprice IN(SELECT distinct(purchprice) FROM softwarecost a WHERE a.id = software.id)