LINUX.ORG.RU

SQL - Как заполнить поле в одной таблице, взяв значение из другой?


0

1

Здравствуйте!


В SQL ни в зуб ногой. Но есть простая задача.

Есть две базы A и B. В обоих есть поле id и поле value. Нужно «перенести» значение value из базы A в базу B (связь по id, само собой). Каким запросом это можно сделать?

PS: В запросе надо предусмотреть временный блок, чтобы не ухерачить всю базу, а проверить перенос на одном id (видимо, как-то WHERE прописать).

Перемещено svu из web-development

★★★★★

Ответ на: комментарий от note173

REPLACE INTO table2 WHERE id=? (SELECT * FROM table1 WHERE id=?)

Ты уверен, что тут будет связь по id? Мне кажется, что этот запрос тупо заменит все записи в конечной базе, взяв их из исходной. Или это не так?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Все записи точно не заменит, здесь же WHERE. Вот будет ли работать вставка из выборки с таким синтаксисом — не знаю, но должна.

А что за SQL?

note173 ★★★★★
()
Ответ на: комментарий от Xintrea

Insert or update вроде нельзя. Тут пишут, что в mssql есть команда merge.

note173 ★★★★★
()

Как я понял, надо заменить значения value в B значениями value в A по совпадающим полям id?
UPDATE B SET value = (SELECT bb.value FROM bb AS B, aa AS A
WHERE bb.id = aa.id);
Как-то так, если мне склероз не изменяет в M$ SQL альясы надо писать так альяс AS имя_таблицы.

Attila ★★
()

Если из базы в базу, то это минимум 2 коннекта, данные запросов между которыми в общем случае не шарятся. Т.о., внешний костыль, все дела.

GateKeeper ★★
()
Ответ на: комментарий от GateKeeper

я сейчас перечитал первый пост, ТС нигде не говорил, что базы на разных серверах. Обращение к нескольким локальным базам вроде как везде поддерживается.

Harald ★★★★★
()
Ответ на: комментарий от Yustas

наверное в стандарте нет. Но в клиенте «базы от Ларри» можно внутри созданного соединения к базе подключить еще другие удаленные базы на других серверах, назначить этим соединениям имена и гонять данные между ними

Harald ★★★★★
()
Ответ на: комментарий от Harald

Насколько помню, relation в запросе начинается с локальных для базы идентификаторов. Т.е. указать идентификатор уровнем выше, если и можно, то это не входит в стандарт.

GateKeeper ★★
()
Ответ на: комментарий от Harald

Хотя, снимаю пренетзии. У ТС каша в сабже и тексте первого поста. Я теперь сам не знаю, то ли он имел ввиду 2 таблицы одной базы, то ли 2 разных базы.

GateKeeper ★★
()
Ответ на: комментарий от GateKeeper

В мускуле, если ничего не путаю, такое тоже возможно. Коннект к БД - это имя хоста, имя пользователя и пароль. И если пользователь имеет на обе БД привилегии - то всё путём. К полям обращаемся в формате db_name.table_name.field_name.

r_asian ★☆☆
()

В PostgreSQL это делается так:

UPDATE A SET A.value = B.value FROM B WHERE A.id = B.id;
Есть такое в стандарте или нет не знаю

Torvus
()
Ответ на: комментарий от Yustas

А... разве можно переносить из базы в базу?

Две таблицы конечно же. Я по старинке, как в FoxPro...

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Две таблицы конечно же. Я по старинке, как в FoxPro...

Пацан сказал - пацан сделал! Ставь оракл и пихай в две базы!!!

Yustas ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.