nombre - group_concat mysql
¿Cómo puedo usar CONCAT durante SELECT en MySQL como un nombre de columna? (2)
¿Alguien puede decirme cómo puedo usar un resultado de un CONCAT como un nombre de columna durante SELECCIONAR? Mi intento se ve así:
INSERT INTO `table_1` (datum, comment)
SELECT CURRENT_DATE(), CONCAT(''s'',DAYOFWEEK(CURRENT_DATE())-1)
FROM `table_2` WHERE id = 12345
Como resultado obtengo s0
- s6
como un valor en mi campo de comentarios en lugar del valor que realmente está en mi 2da tabla de la que quiero leer el valor de: /
funfact: si simplemente escribo s0
(como un ejemplo, funciona con los 7) en lugar de CONCAT, funciona bien y obtengo el valor real que quiero.
Gracias por tu ayuda
Bueno, debo admitir que me tomó un tiempo entender lo que estás preguntando. Table2 tiene 7 columnas s0 a s6 y desea obtener el valor de la columna que coincide con la fecha. ¿Sí?
Entonces, por supuesto usando
SELECT CURRENT_DATE(), s2
te da el contenido de s2, mientras que
SELECT CURRENT_DATE(), CONCAT(''s'',DAYOFWEEK(CURRENT_DATE())-1)
te da ''s2''. Sería horrible si no. ¿Realmente espera que el DBMS calcule un valor y luego verifique si ese valor coincide con el nombre de una columna? Entonces
select name, job from person;
seleccionaría el nombre y el trabajo de la persona en la mayoría de los casos, pero para la persona llamada Job, obtendría el trabajo dos veces. Ves que esto no se puede desear, ¿verdad?
Entonces, verifique el resultado de su expresión y lea de la columna correspondiente:
insert into table_1 (datum, comment)
select
current_date(),
case dayofweek(current_date()) - 1
when 0 then s0
when 1 then s1
when 2 then s2
when 3 then s3
when 4 then s4
when 5 then s5
when 6 then s6
end
from table_2 where id = 12345;
Puedes usar así
INSERT INTO `table_1` (datum, comment)
SELECT CURRENT_DATE(),
CASE DAYOFWEEK(CURRENT_DATE())-1
WHEN 0 THEN s0
WHEN 1 THEN s1
WHEN 2 THEN s2
WHEN 3 THEN s3
WHEN 4 THEN s4
WHEN 5 THEN s5
WHEN 6 THEN s6
END
FROM `table_2` WHERE id = 12345