将连接的值插入到表中
Posted
技术标签:
【中文标题】将连接的值插入到表中【英文标题】:Inserting a concatenated value into a table 【发布时间】:2021-12-28 08:20:43 【问题描述】:使用 mysql,我可以计算时间差并将其作为串联输出。 我正在使用来自here.的查询
WITH difference_in_seconds AS (
SELECT
id,
departure,
arrival,
TIMESTAMPDIFF(SECOND, departure, arrival) AS seconds
FROM travel
),
differences AS (
SELECT
id,
departure,
arrival,
seconds,
MOD(seconds, 60) AS seconds_part,
MOD(seconds, 3600) AS minutes_part,
MOD(seconds, 3600 * 24) AS hours_part
FROM difference_in_seconds
)
SELECT
id,
departure,
arrival,
CONCAT(
FLOOR(seconds / 3600 / 24), ' days ',
FLOOR(hours_part / 3600), ' hours ',
FLOOR(minutes_part / 60), ' minutes ',
seconds_part, ' seconds'
) AS difference
FROM differences;
我的输出是这样的:
id departure arrival difference
1 2018-03-25 12:00:00 2018-04-05 07:30:00 10 days 19 hours 30 minutes 0 seconds
我想做的是获取连接的“差异”字符串并更新/插入另一个表。在另一个表中,我有一个名为“time_difference”的列,所以我尝试使用更新查询。我还有一个条件集,它应该只更新到相关的用户配置文件。
UPDATE airport_database.user
SET time_difference = (SELECT
id,
departure,
arrival,
CONCAT(
FLOOR(seconds / 3600 / 24), ' days ',
FLOOR(hours_part / 3600), ' hours ',
FLOOR(minutes_part / 60), ' minutes ',
seconds_part, ' seconds'
) AS difference
FROM differences)
WHERE name = "Sir";
但是,我得到了
错误 #1241 - 操作数应包含 1 列。
因此我也尝试通过以下方式获取连接值:
UPDATE airport_database.user
SET time_difference = (difference)
WHERE name = "Sir";
我得到了
错误 #1054 - “字段列表”中的“差异”列未知。
我想知道为什么我的连接字符串列无法被 MYSQL 检测到。
任何帮助将不胜感激,谢谢。
【问题讨论】:
在第二次 CTE 中获取秒数差异然后将结果格式化为时间的原因是什么,而您可以使用 TIMEDIFF() 并一步获得所需形式的差异? 我得到错误 #1241 您必须在 UPDATE 中使用不相关的子查询,而是使用多表 UPDATE 语法。UPDATE destination_table JOIN (your subquery) ON (joining condition) SET ...
.
@Akina 我想用秒的差来计算秒的余数,它可以计算分钟和更晚的小时来得到差异。之后它将以天、小时、分钟和秒的形式显示
【参考方案1】:
演示。
CREATE TABLE src (id INT, departure DATETIME, arrival DATETIME); INSERT INTO src VALUES (1, '2018-03-25 12:00:00', '2018-04-05 07:30:00'); CREATE TABLE dst (id INT, departure DATETIME, arrival DATETIME, verbal_diff VARCHAR(255)); INSERT INTO dst SELECT *, NULL FROM src; SELECT * FROM dst;
id departure arrival verbal_diff 1 2018-03-25 12:00:00 2018-04-05 07:30:00 null
UPDATE dst JOIN (SELECT id, CONCAT(TIMESTAMPDIFF(DAY, departure, arrival), DATE_FORMAT(TIMEDIFF(arrival, departure), ' days %H hours %i minutes %s seconds')) difference FROM src) data USING (id) SET dst.verbal_diff = data.difference; SELECT * FROM dst;
id departure arrival verbal_diff 1 2018-03-25 12:00:00 2018-04-05 07:30:00 10 days 19 hours 30 minutes 00 seconds
db小提琴here
参见UPDATE Statement,多表语法。
【讨论】:
以上是关于将连接的值插入到表中的主要内容,如果未能解决你的问题,请参考以下文章
MS Access 2016:如何将连接字段从表单输入到表中
我想创建一个复合类型名称 DeptRecord 并接受来自用户的值并将接受的值插入到表中