有人能告诉我如何在SELECT期间使用CONCAT的结果作为列名吗?我的尝试看起来像这样:
INSERT INTO `table_1` (datum, comment)
SELECT CURRENT_DATE(), CONCAT('s',DAYOFWEEK(CURRENT_DATE())-1)
FROM `table_2` WHERE id = 12345
因此,我将s0
- s6
作为我的评论字段中的值,而不是我希望从第二个表中读取值的值:/
funfact:如果我只输入s0
(作为一个例子,适用于所有7个)而不是CONCAT,它可以正常工作,我得到了我想要的实际值。
感谢您的帮助。
答案 0 :(得分:1)
嗯,我必须承认我花了一段时间才明白你在问什么。表2有7列s0到s6,您希望从与日期匹配的列中获取值。是
所以,当然使用
SELECT CURRENT_DATE(), s2
为您提供s2的内容,而
SELECT CURRENT_DATE(), CONCAT('s',DAYOFWEEK(CURRENT_DATE())-1)
给你' s'。如果没有,那将是可怕的。您是否真的希望DBMS计算一个值,然后检查该值是否恰好与列名相匹配?然后
select name, job from person;
在大多数情况下,会选择此人的姓名和工作,但对于名为Job的人,您将获得两次工作。你知道这是不可取的,对吗?
因此,请检查您的表达式结果,并从相应的列中读取:
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;
答案 1 :(得分:0)
你可以这样使用
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