ОБНОВЛЯЙТЕ таблицу из SELECT другого

  • У меня есть первые таблицы articles где некоторые данные отсутствуют.
  • В таблице articles_tmp меня есть часть недостающих данных.
  • Поэтому я хочу, чтобы UPATE articles.path WHERE path IS NULL с данными в articles_tmp.path WHERE path IS NOT NULL.

С SQLite это не работает:

UPDATE articles 
SET path = (
 SELECT at.path
 FROM articles_tmp AS at, articles AS a
 WHERE at.article_id = a.id AND a.path IS NULL AND NOT at.path IS NULL
)
WHERE path IS NULL

С MS Access это отлично работает:

UPDATE articles
 INNER JOIN articles_tmp 
 ON articles.id = articles_tmp.id 
SET articles.path = articles_tmp.path
WHERE articles.path IS NULL AND articles_tmp.path IS NOT NULL

Может кто-нибудь помочь?

2 ответа

Поскольку синтаксис SQL Server, который я предоставил, не работал, вот решение, с которым я столкнулся. Просто небольшая модификация вашего исходного запроса, но с моим предложением "корреляции". Вот скрипт SQL для этого: http://sqlfiddle.com/#!7/34589/7

Вот код:

UPDATE articles
SET path = (SELECT path FROM articles_tmp AS t WHERE t.id = articles.id)
WHERE path IS NULL;


Это работает (очень коррелировано, наверное, слишком много):

UPDATE articles
SET path = (
 SELECT at.path
 FROM articles_tmp AS at
 WHERE at.article_id=articles.id 
 )
WHERE EXISTS (
 SELECT *
 FROM articles_tmp AS at
 WHERE at.article_id=articles.id AND articles.path IS NULL AND NOT at.path=''
 )

licensed under cc by-sa 3.0 with attribution.