Estoy usando MariaDB 10.4. Tengo una lista de valores, es decir [email protected]
, [email protected]
y [email protected]
(mi lista real es mucho más largo).
Me gustaría hacer una inserción SQL equivalente a la siguiente:
insert into my_table(email, foreign_key_id, timestamp) values
('[email protected]', 1, now()),
('[email protected]', 1, now()),
('[email protected]', 1, now());
Si bien solo tiene que escribir algo como select email from ('[email protected]', '[email protected]', and '[email protected]')
en algún lugar de la consulta de inserción sin duplicar las constantes / funciones en cada línea. ¿Puedo hacer esto en SQL sin tablas temporales?
INSERT INTO my_table (email)
SELECT email
FROM JSON_TABLE( @value,
"$[*]" COLUMNS ( email VARCHAR(32) PATH "$"
)
) AS parse_JSON;
Aplicable a MySQL 8+
Para MariaDB 10.2.3+, use algo parecido a (el violín en línea emite errores incomprensibles donde claramente no hay errores, por lo que no puedo probar)
INSERT INTO my_table (email)
WITH RECURSIVE
cte AS ( SELECT 0 AS num, JSON_VALUE(@json, '$[0]') AS email
UNION
SELECT num + 1, JSON_VALUE(@json, CONCAT('$[', num + 1, ']'))
FROM cte
WHERE JSON_VALUE(@json, CONCAT('$[', num + 1, ']') IS NOT NULL
)
SELECT email
FROM cte;
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras