Подтвердить что ты не робот

MySql - обновить таблицу, используя выбранный устав из той же таблицы

Я пытаюсь обновить строку в таблице, используя значения из другой строки (и разных столбцов) в той же таблице. Что-то вроде этого, хотя мой синтаксис не дает никаких результатов: Вот код (обновленный):

UPDATE table1 AS t1 INNER JOIN
(SELECT field_id_46,field_id_47 FROM table1 WHERE entry_id = 36) AS t2
SET t1.field_id_60 = t2.field_id_46, t1.field_id_61 = t2.field_id_47
WHERE t1.entry_id = 45;
4b9b3361

Ответ 1

update table as t1
inner join (
select field_id_46,field_id_47 from table where entry_id = 36) as t2
set t1.field_id_60 = t2.field_id_46,
    t1.field_id_61 = t2.field_id_47
where t1.entry_id = 45

или, просто

update table as t1,
(
select field_id_46,field_id_47 from table where entry_id = 36) as t2
set t1.field_id_60 = t2.field_id_46,
    t1.field_id_61 = t2.field_id_47
where t1.entry_id = 45

Ответ 2

Добавление..

Те же таблицы, в которых больше одного регистра

UPDATE table t1
INNER JOIN table t2 ON t2.entry_id = t1.entry_id
SET t1.field_id_60 = t2.field_id_60,
    t1.field_id_61 = t2.field_id_61

Ответ 3

Вы можете обновить, используя внутреннее соединение, следующим образом:

UPDATE table1 AS t1 
    INNER JOIN table1 AS t2 
    SET t1.field_id_60 = t2.field_id_46, 
        t1.field_id_61 = t2.field_id_47 
WHERE t1.entry_id = 54;

Ответ 4

Я нашел этот вопрос очень полезным, потому что я пытался вставить в таблицу вручную, пока эта конкретная база данных использовала таблицу hibernate_sequence. Я использовал решение этого вопроса, чтобы изменить мой скрипт импорта. У меня был скрипт со множеством операторов "вставлять в" один за другим, и мне приходилось устанавливать идентификатор вручную. например:

insert into T01_REGIONS (ID, NAME) VALUES ({the next id from hibernate_sequence}, 'name1');
insert into T01_REGIONS (ID, NAME) VALUES ({the next id from hibernate_sequence}, 'name2');
..
.

Так что я сделал следующее, чтобы обойти мою проблему:

insert into T01_REGIONS (ID, NAME) VALUES ((select next_val from hibernate_sequence limit 1), 'name1');update hibernate_sequence as t1, (select next_val+1 as next from hibernate_sequence limit 1) as t2 set t1.next_val = t2.next;
insert into T01_REGIONS (ID, NAME) VALUES ((select next_val from hibernate_sequence limit 1), 'name2');update hibernate_sequence as t1, (select next_val+1 as next from hibernate_sequence limit 1) as t2 set t1.next_val = t2.next;
..
.

Добавление дополнительного запроса в конце каждой строки моего сценария sql было легко с notepad++. Я знаю, что это может быть очень некрасиво, но это сработало для меня, чтобы импортировать данные в тестовую базу данных mysql, управляемую hibernate, в то время как мои данные поступали из базы данных, управляемой oracle hibernate.

Ответ 5

Вам не нужен этот запрос

SELECT field_id_46,field_id_47 FROM table WHERE entry_id = '36'

Вы должны просто сделать это:

UPDATE table SET (field_id_60,field_id_61) ('coming_value','other_value') WHERE entry_id = '45';

Также вы можете сделать это с помощью двух разных coloumns.I думаю, что вы можете сделать это. Это может быть у меня нет идеи. Вы должны разделить этот запрос на каком языке вы используете. В первом методе вы должны использовать этот запрос.

SELECT field_id_46,field_id_47 FROM table WHERE entry_id = '36'

И вы также можете вернуть String, исходящую из этих данных. Затем вы можете использовать это возвращаемое значение в функции обновления.