powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Возможно ли совместить INSERT, SELECT и выборку из данного множества
7 сообщений из 7, страница 1 из 1
Возможно ли совместить INSERT, SELECT и выборку из данного множества
    #39315909
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые, добрый день!

Хочу спросить, есть ли для MySQL возможность сделать такой запрос:
Допустим есть 2 таблицы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Table tab1 (
   id     SERIAL
)

Table tab2 (
   id      SERIAL,
   tab1ID  BIGINT UNSIGNED NOT NULL,
   relData CHAR(10),
   FK tab1ID -> tab1.id
)



И мне надо вставить в Tab2, несколько строк. Т.е. tab1ID у них один, а вот relData - заданное множество.
Т.е. если это попробовать выразить корявым SQL запросом для наглядности, то вот:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
INSERT INTO tab2 (tab1ID, relData) 
SELECT  aa.id, bb.data
FROM  Tab1      AS aa,
     (SELECT  "data1" AS data
         UNION
      SELECT  "data2" AS data
         UNION
      SELECT  "data3" AS data
              ) AS bb
WHERE aa.id=4


Даже не знаю, корректен ли такой запрос, написал его просто для иллюстрации вопроса.
Подскажите пожалуйста, как такую задачу решить?
...
Рейтинг: 0 / 0
Возможно ли совместить INSERT, SELECT и выборку из данного множества
    #39315911
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormot,

Именно таким и запросов и писать. Только union all вместо union.
...
Рейтинг: 0 / 0
Возможно ли совместить INSERT, SELECT и выборку из данного множества
    #39315925
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И
Код: sql
1.
AS data

нужен только у первой строки - то есть беды большой не будет, но и толку никакого, алиасы во втором и последующих запросах игнорятся, а текст длиннее...
...
Рейтинг: 0 / 0
Возможно ли совместить INSERT, SELECT и выборку из данного множества
    #39315928
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясно, да, попробовал, так работает.
А почему нет простого способа задать набор строк в виде аргументов функции? Очевидная же функциональность для БД.

Задал что-то типа SELECT DATA_IN("123", "234", "345") AS field1, DATA_IN("a", "b", "c") AS field2
и получил:
Код: sql
1.
2.
3.
4.
5.
6.
7.
------------------------------
| field1       | field2      |
------------------------------
| 123          | a           |
| 234          | b           |
| 345          | c           |
------------------------------
...
Рейтинг: 0 / 0
Возможно ли совместить INSERT, SELECT и выборку из данного множества
    #39315931
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kormotОчевидная же функциональность для БД.То, что ты называешь "очевидное", есть ни что иное как транспонирование, а в терминах SQL это PIVOT, который является чужеродной "нашлёпкой" по причине его вопиющей нереляционности.
...
Рейтинг: 0 / 0
Возможно ли совместить INSERT, SELECT и выборку из данного множества
    #39316663
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaТо, что ты называешь "очевидное", есть ни что иное как транспонирование, а в терминах SQL это PIVOT, который является чужеродной "нашлёпкой" по причине его вопиющей нереляционности.
Ясно, спасибо за объяснение. Хотя конечно не первый раз возникает необходимость в эдаком "вопиющем транспонировании" :)
...
Рейтинг: 0 / 0
Возможно ли совместить INSERT, SELECT и выборку из данного множества
    #39316666
kormot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaнужен только у первой строки - то есть беды большой не будет, но и толку никакого, алиасы во втором и последующих запросах игнорятся, а текст длиннее...
С этим сталкивался именно вопросом. Когда например в одном запросе выбирал более - менее разнородные данные. По типу:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT aa.id /*0*/, bb.data /*1*/
FROM (
    SELECT   tab1.id AS id, tab2.data AS data
UNION 
    SELECT   tab3.id AS id, tab5.info AS data
)


То в php коде при обработке результата конструкцией:
Код: php
1.
2.
3.
while($cur=mysqli_fetch_array($result)){
   echo $cur[0].', '.$cur[1].'<br>';
}


Если не во всех блоках union указывать алиасы для столбцов, то результат запросом выбирался верный, а вот обработка таким образом давала какие-то непредсказуемые результаты. То там, то сям появлялись пустые строки вместо данных.
Я думаю это может из-за того, что php видя разные названия столбцов в выборке формирует ассоциативный только массив значений или ещё что. Вроде бы помогало при этом указание делать только числовой массив:
Код: php
1.
2.
3.
while($cur=mysqli_fetch_array($result, MYSQLI_NUM)){
   echo $cur[0].', '.$cur[1].'<br>';
}
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Возможно ли совместить INSERT, SELECT и выборку из данного множества
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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