ОБНОВЛЕНИЕ Кросс-таблицы в SQLITE3

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

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

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

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

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
10
0
17 005
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Вы можете предложить свое решение?

Hannes de Jager 27.11.2009 13:04

@HannesdeJager Ознакомьтесь с новым ответом, я нашел решение.

Trey Jackson 24.03.2010 20:24

Как бы то ни было, Microsoft SQL Server и MySQL - единственные марки баз данных, которые поддерживают обновления нескольких таблиц, и синтаксис, который они используют, не похож.

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

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

Разве SQL Server и MySQL вместе взятые не представляют собой очень большую часть всех баз данных в производстве? Я предполагаю, по крайней мере, две трети, а другой может быть какой-нибудь Oracle. Этот комментарий создает впечатление "необычного" запроса, но на самом деле он поддерживается большинством баз данных prod.

Tommy 20.03.2013 19:27

@Tommy, поскольку синтаксис обновления нескольких таблиц Microsoft несовместим с синтаксисом обновления нескольких таблиц MySQL, я не думаю, что будет справедливо сгруппировать их вместе.

Bill Karwin 20.03.2013 19:59
Ответ принят как подходящий

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

UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1)

не очень полезно, если у вас есть несколько столбцов, которые вы хотите установить из одной строки во второй таблице.

Michael 03.06.2012 03:29

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

Trey Jackson 03.06.2012 06:36

Но будьте осторожны, это установит для столбца tbl1 Col2 значение null, если в tbl2 не найдена соответствующая строка.

Durai Amuthan.H 12.01.2014 16:27

что произойдет, если внутренний запрос вернет> 1 строку?

rayzinnz 30.06.2017 07:45

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

У меня были проблемы с 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/[email protected]/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;

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

«У меня возникли проблемы с UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1), где он обновляет столбцы в tbl1, которых нет в tbl2.» Как вы можете обновить столбец в таблице 1 до столбец в tbl2, которого нет в tbl2 ?? разве этот запрос не немного недействителен?

Tommy 20.03.2013 19:29

Другие вопросы по теме