Прежде всего, извините за заголовок этой темы, мне не удалось найти другую, более релевантную, поэтому не стесняйтесь изменять ее, если у вас есть идея получше.
В моем случае у меня есть дватаблицы, одна из которых содержит много столбцов, включая один столбец Value
, а вторая состоит из трех столбцов:
mysql> describe s_attrib;
+-------------+-------------+------+
| Field | Type | Null |
+-------------+-------------+------+
| Login | varchar(32) | NO |
| Type | enum | NO |
| Value | varchar(64) | NO |
+-------------+-------------+------+
3 rows in set (0.00 sec)
mysql> select * from s_attrib LIMIT 0,4;
+----------+-----------+---------+
|Login | Type | Value |
+----------+-----------+---------+
| login_1 | exception | value_1 |
| login_1 | exception | value_2 |
| login_2 | exception | value_3 |
| login_3 | exception | value_4 |
+--------------------------------+
В этой таблице значение уникально.У входа в систему может быть много значений, но значение не может иметь больше, чем при подключенном входе в систему.
Что я сделал, чтобы получить значения, которые мне нужно вставить для конкретного имени входа в таблицу s_attrib:
mysql> SELECT DISTINCT Value FROM my_table WHERE SOME_BUSINESS_CONDITIONS_HERE;
+---------+
| Value |
+---------+
| value_5 |
| value_6 |
| value_7 |
| value_8 |
+---------+
Я знаю, что эти значения отсутствуют в моей таблице s_attrib
, поэтому при вставке не будет никакого противоречия.
Что я пытаюсь сделать сединственный запрос MySQL состоит в том, чтобы вставить эти значения, такие как:
INSERT INTO s_attrib (Login, type, value) VALUES ('MyLogin', 'except', 'value_5');
INSERT INTO s_attrib (Login, type, value) VALUES ('MyLogin', 'except', 'value_6');
INSERT INTO s_attrib (Login, type, value) VALUES ('MyLogin', 'except', 'value_7');
INSERT INTO s_attrib (Login, type, value) VALUES ('MyLogin', 'except', 'value_8');
Есть ли способ сделать это с помощью одного запроса, используя INSERT INTO ... SELECT
?