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

Хочу спросить, есть ли для 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
26.09.2016, 20:26
    #39315911
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли совместить INSERT, SELECT и выборку из данного множества
kormot,

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

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

Задал что-то типа 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
26.09.2016, 21:40
    #39315931
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли совместить INSERT, SELECT и выборку из данного множества
kormotОчевидная же функциональность для БД.То, что ты называешь "очевидное", есть ни что иное как транспонирование, а в терминах SQL это PIVOT, который является чужеродной "нашлёпкой" по причине его вопиющей нереляционности.
...
Рейтинг: 0 / 0
28.09.2016, 08:15
    #39316663
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли совместить INSERT, SELECT и выборку из данного множества
AkinaТо, что ты называешь "очевидное", есть ни что иное как транспонирование, а в терминах SQL это PIVOT, который является чужеродной "нашлёпкой" по причине его вопиющей нереляционности.
Ясно, спасибо за объяснение. Хотя конечно не первый раз возникает необходимость в эдаком "вопиющем транспонировании" :)
...
Рейтинг: 0 / 0
28.09.2016, 08:24
    #39316666
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли совместить INSERT, SELECT и выборку из данного множества
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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Возможно ли совместить INSERT, SELECT и выборку из данного множества / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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