Intereting Posts
sql как сделать запрос выбора Установите максимальное значение столбца в качестве значения начала последовательности с помощью тегов ликбазы Текстовый поиск Oracle по нескольким таблицам и объединениям MS SQL 2008 HowTo читать из журнала Как отсортировать столбец VARCHAR на SQL-сервере, который содержит числа? Как получить запрос атрибутов столбцов из имени таблицы с помощью PostgreSQL? Вставка новой строки в таблицу базы данных sql Разница между «И» и «&&» в SQL Как вставить записи на основе предыдущей вставки? MsAccess SQL count дней в перекрывающиеся периоды с некоторыми исключениями периодов Hadoop / Hive: Загрузка данных с .csv на локальном компьютере python + sqlite, вставить данные из переменных в таблицу Попытка получить SELECT TOP для работы с параметром в ACCESS как выбрать все данные, чей входной массив найден и не найден в mysql Ошибка java.sql.SQLException: ORA-00911: недопустимый символ

три таблицы с Inner Join

У меня есть следующие три таблицы …

Table1 IDA colB colC 111 aw 222 bw 333 cs 444 bg Table2 IDB colB colC 11 wf 12 wr 13 sg Table3 IDA IDB 111 11 222 12 333 13 444 14 

Мне нужно, чтобы скопировать из таблицы1 в таблицу2, и я мог бы использовать следующий простой запрос MySQL, чтобы сделать это …

 INSERT INTO table2 SELECT * FROM table1 

Проблема в том, что у меня нет одинакового типа id … две таблицы связаны по третьей таблице table3. в котором IDA содержит первичный ключ таблицы1, а IDB содержит первичный ключ таблицы2,

так, например, если я хочу скопировать из таблицы1 IDA (111) в таблицу2, как это сделать? и если существует IDB, как я могу обновить Duplicate Key …

У меня есть следующий запрос, но не работает …

 INSERT INTO table2 SELECT * FROM table1 WHERE IDA IN ( SELECT table1 b INNER JOIN table3 c ON c.IDA = b.IDA INNER JOIN table2 a ON a.IDB = c.IDB ) WHERE b.IDA=111 

Но, если я получу обобщенный ответ … Спасибо

 INSERT INTO table2 SELECT t3.idb ,t1.colb as ncolb ,t1.colc as ncolc FROM table1 t1 join table3 t3 on t1.ida = t3.ida ON DUPLICATE KEY UPDATE colb = ncolb ,colc = ncolc 

Нет MySQL на мне прямо сейчас, поэтому синтаксис может быть не на 100% правильным, но это должно дать вам представление о том, как это сделать. В зависимости от того, имеет ли table3 запись для каждого table1 id coalesce(t3.idb, t1.ida) вам может потребоваться изменить t3.idb для coalesce(t3.idb, t1.ida) и изменить join left join чтобы left join к запросу, если вы хотите, чтобы они были скопированы. Помните, что table2 будет иметь идентификаторы из таблицы 1)

 INSERT INTO table2 SELECT * FROM table1 WHERE IDA IN ( SELECT * FROM table1 b INNER JOIN table3 c ON c.IDA = b.IDA INNER JOIN table2 a ON a.IDB = c.IDB ) HAVING b.IDA=111 

попробуйте это, это может вам помочь

Три таблицы JOIN синтаксиса в SQL Вот общий синтаксис SQL-запроса для объединения трех или более таблиц. Этот SQL-запрос должен работать во всей базе данных основных отношений, например MySQL, Oracle, Microsoft SQLServer, Sybase и PostgreSQL:

 SELECT t1.col, t3.col FROM table1 join table2 ON table1.primarykey = table2.foreignkey join table3 ON table2.primarykey = table3.foreignkey 

Сначала мы соединяем таблицы 1 и таблицу 2, которые создают временную таблицу с комбинированными данными из таблицы1 и таблицы2, которая затем соединяется с таблицей 3. Эта формула может быть расширена для более чем 3 таблиц в N таблицах. Вам просто нужно убедиться, что SQL-запрос должен иметь оператор объединения N-1, чтобы присоединиться к N таблицам. например, для объединения двух таблиц нам требуется 1 оператор объединения, и для объединения трех таблиц нам требуется 2 команды объединения.