powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вставить в таблицу значения из нескольких таблиц
14 сообщений из 14, страница 1 из 1
Вставить в таблицу значения из нескольких таблиц
    #39362254
Arbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, подскажите, как одним запросом выполнить условия ниже?

Условие:
1) Найти последнюю строку в табл_1, где home = '123'. И добавить в конец табл_1.
2) ... но заменить time1 на значение time2 из табл_2, где home = '123'.

Есть таблица_1 со столбцами: id , name , home , link , time1 .
Есть таблица_2 со столбцами: other_id , home , time2 .

Код: sql
1.
INSERT INTO `tabl_1` (id, name, home, link, time1) SELECT id, name, home, link, (SELECT time2 FROM `tabl_2` WHERE `home` = '123') FROM `tabl_2` WHERE `home` = '123' 



Подскажите, как правильно это сделать?
...
Рейтинг: 0 / 0
Вставить в таблицу значения из нескольких таблиц
    #39362395
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сперва просто напишите SELECT на получение нужной записи из t1, но со значением из t2. Но БЕЗ подзапросов.
...
Рейтинг: 0 / 0
Вставить в таблицу значения из нескольких таблиц
    #39362746
Arbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
SELECT t1.id, t1.name, t1.home, t1.ling, t2.time2
FROM t1, t2
WHERE t1.home = '123' AND t2.home = '123'
ORDER BY t2.other_id DESC



Похоже на этот запрос?
...
Рейтинг: 0 / 0
Вставить в таблицу значения из нескольких таблиц
    #39362950
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Только при условии, что поле home и в той, и в другой таблице уникальны.
Если это верно - просто добавьте теперь секцию INSERT. Она у Вас нормальная.
Возможная трабла - отказ сервера вставлять записи в таблицу, из которой делается выборка. Тогда конвертируйте свой запрос на выборку в представление, и вставляйте из него.
...
Рейтинг: 0 / 0
Вставить в таблицу значения из нескольких таблиц
    #39363082
Arbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Нет, home не уникально. Что в одной, что в другой таблице строки периодически повторяются. Но в t2 изменяется время, собственно поэтому мне нужно внести в t1 подобную строку из t1, но с актуальным временем из t2.

Можно же просто взять последние похожие значения полей из обеих таблиц (LIMIT)?

Код: plsql
1.
2.
3.
4.
5.
6.
INSERT INTO `t1` (id, name, home, link, time1)
SELECT t1.id, t1.name, t1.home, t1.ling, t2.time2
FROM t1, t2
WHERE t1.home = '123' AND t2.home = '123'
ORDER BY t1.id, t2.other_id DESC
LIMIT 1;
...
Рейтинг: 0 / 0
Вставить в таблицу значения из нескольких таблиц
    #39363087
Arbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот этот запрос работает хорошо:
Код: plsql
1.
2.
3.
4.
5.
6.
INSERT INTO `t1` (name, home, link, time1)
SELECT t1.name, t1.home, t1.link, t2.time2
FROM t1, t2
WHERE t1.home = '123' AND t1.home = t2.home
ORDER BY t1.id DESC
LIMIT 1



Правда я не совсем понимаю почему сортируются обе таблица в обратном порядке, хотя я задаю DESC только для t1. Но главное, что мне так и нужно, и следовательно все отлично работает. Спасибо, Akina)
...
Рейтинг: 0 / 0
Вставить в таблицу значения из нескольких таблиц
    #39363103
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArbusНет, home не уникально.
Ну хотя бы во второй таблице - уникально? потому как если нет - то запрос-то получится недетерминированный...
...
Рейтинг: 0 / 0
Вставить в таблицу значения из нескольких таблиц
    #39363538
Arbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
t1:
----+---------+---------+-------+---------+
 id | name | home |  link  | time1 |
----+---------+---------+-------+---------+
 1 |  vasa  |   10   | zzzz | 12:10 |
----+---------+---------+-------+---------+
 2 |  kola   |   14   | xxxx | 15:23 |
----+---------+---------+-------+---------+
 3 |  mark  |   53   | ttrre  | 22:50 |
----+---------+---------+-------+---------+
 4 |  vasa  |   10   | zzzz | 23:28 |
----+---------+---------+-------+---------+
 5 |  lisa    |    2    | bbbb | 23:33 |
----+---------+---------+-------+---------+

t2:
------------+---------+---------+
other_id | home | time2 |
------------+---------+---------+
     1     |    12    | 03:11 |
------------+---------+---------+
     2     |    10    | 04:52 |
------------+---------+---------+
     3     |    16    | 05:01 |
------------+---------+---------+
     4     |    21    | 05:03 |
------------+---------+---------+
     5     |    10    | 05:17 |
------------+---------+---------+
     6     |    12    | 08:40 |
------------+---------+---------+

Мне известно home = 10
Должно получиться:
t1:
----+---------+---------+-------+---------+
 6 |  vasa  |   10   | zzzz | 05:17 |
----+---------+---------+-------+---------+

Вроде бы мое решение подходит полностью для этой задачи.
Или что-то может пойти не так?
...
Рейтинг: 0 / 0
Вставить в таблицу значения из нескольких таблиц
    #39363707
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArbusИли что-то может пойти не так?
Не просто может, а пойдёт. Во второй таблице 2 записи с home = 10. Вот с чего бы при обновлении было взято именно 05:17? чем хуже 04:52? Если же надо определённое, то надо безальтернативно получить именно его. Например для максимального - добавить группировку по полям первой таблицы и MAX() по полю второй.
...
Рейтинг: 0 / 0
Вставить в таблицу значения из нескольких таблиц
    #39363996
Arbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaНапример для максимального - добавить группировку по полям первой таблицы и MAX() по полю второй.

Не понял как, что и зачем группировать. Но вот так мне кажется надежней выглядит:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
INSERT INTO `t1` (name, home, link, time1)
SELECT t1.name, t1.home, t1.link, t2.time2
FROM t1, t2
WHERE t1.home = '10' AND t1.home = t2.home AND t2.other_id = (
   SELECT MAX(other_id) FROM t2 WHERE home = '10'
)
ORDER BY t1.id DESC
LIMIT 1
...
Рейтинг: 0 / 0
Вставить в таблицу значения из нескольких таблиц
    #39364132
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем такие навороты? когда можно просто

Код: sql
1.
2.
3.
4.
5.
6.
7.
INSERT INTO `t1` (name, home, link, time1)
SELECT t1.name, t1.home, t1.link, t2.time2
FROM t1, ( SELECT t3.home, MAX(t3.time) AS time2
           from t1 AS t3
           GROUP BY t3.home
         ) AS t2
WHERE t1.home = '10' AND t1.home = t2.home
...
Рейтинг: 0 / 0
Вставить в таблицу значения из нескольких таблиц
    #39364279
Arbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, честно говоря не совсем понял про t3. Ну и проблему не могу решить в связи с этим моим непониманием.

...
Рейтинг: 0 / 0
Вставить в таблицу значения из нескольких таблиц
    #39364280
Arbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, разобрался в проблеме. Но код выводит все похожие home, поэтому все равно LIMIT 1, ORDER BY id DESC.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT t1.name, t1.home, t1.link, t2.time2
FROM t1, ( SELECT t3.home, MAX(t3.time1) AS time2
           from t1 AS t3
           GROUP BY t3.home
         ) AS t2
WHERE t1.home = '10' AND t1.home = t2.home
ORDER BY t1.id DESC
LIMIT 1
...
Рейтинг: 0 / 0
Вставить в таблицу значения из нескольких таблиц
    #39364283
Arbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
time1 и time2 не всегда идут по порядку и к увеличению, поэтому нельзя MAX(time2).
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вставить в таблицу значения из нескольких таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]