ОБНОВЛЕНИЕ кросс-таблицы в SQLITE3 - PullRequest
9 голосов
/ 30 ноября 2008

В SQL Server я могу сделать что-то вроде этого:

UPDATE tbl1 SET col2 = tbl2.col2 
FROM table1 tbl1 INNER JOIN table2 tbl2 ON tbl1.col1 = tbl2.col1

Я не удосужился посмотреть, является ли это частью какого-либо стандарта SQL, и я уверен, что есть другие способы сделать это, но это поразительно полезно.

Вот моя проблема. Мне нужно сделать что-то подобное в SQL (т.е. не на языке хоста) с SQLITE3. Можно ли это сделать?

Ответы [ 4 ]

21 голосов
/ 24 марта 2010

Это работает для sqlite:

UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1)
2 голосов
/ 02 января 2013

Просто чтобы подчеркнуть пост Георгия Хигли:

У меня были проблемы с UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1), когда он обновляет столбцы в tbl1, которых нет в tbl2.

см. Сообщение о гепарде в http://sqlite.phxsoftware.com/forums/p/1708/7238.aspx, которое указывает на:

http://www.mail-archive.com/sqlite-users@sqlite.org/msg27207.html

Код:

insert or replace into foo (id, name, extra)
select bar.id, bar.name, foo.extra
from bar left join foo on bar.id = foo.id;

и это, кажется, работает правильно. Кажется, на разных сайтах есть много постов, которые рекомендуют первый подход, так что это немного сбивает с толку. Я бы посоветовал вам очень тщательно проверить вывод, если вы используете этот метод, который кажется более быстрым и может работать с сопоставленными таблицами.

1 голос
/ 01 декабря 2008

Что бы это ни стоило, Microsoft SQL Server и MySQL - единственные бренды баз данных, которые поддерживают многостоловые обновления, и синтаксис каждого из них не одинаков.

Эта функция не является частью стандартного SQL. Поэтому неудивительно, что поддержка многостолового обновления (и удаления) нестандартна и не поддерживается многими брендами.

В любом случае, я рад, что вы нашли решение, которое подходит для вашей задачи.

1 голос
/ 30 ноября 2008

Я обнаружил, что это можно сделать с помощью INSERT OR REPLACE INTO. Немного более многословно, чем эквивалент T-SQL, но так же удобно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...