1

我正在尝试嵌套一些查询,但到目前为止我得到了错误 1242:子查询返回超过 1 行。我想要不止一行,因为我正在处理许多记录。

我有 2 张桌子。一个的开始日期存储在 3 列中;yr_comm、mth_comm、day_comm。第二个表有一个服务期(以年为单位),表示为一个整数(2.71、3.45 等)。

我需要获取此开始日期(来自表 1),并添加服务期限(来自表 2)以获得结束日期,但我只需要显示年份。

我有 2 个单独的查询工作得很好,它们会产生所需的值,但是我在组合查询以获得所需的最终结果时遇到了麻烦。

查询 1:将 3 个开始值连接成日期格式

SELECT concat_ws('-', yr_comm, mth_comm, day_comm) AS date_comm
FROM table 1

查询 2:将整数 yrs_service 转换为天数

SELECT format(yrs_served * 365, 0)  AS days_served
FROM table 2

查询3:使用date_add函数将days服务添加到开始日期

SELECT date_add(date_comm, INTERVAL days_served DAY) AS date_left

谁能建议我如何实现上述目标?提前谢谢了。

编辑 - 这是我正在处理的完整查询:

SELECT prime_minister.pm_name, yr_comm, party, ADDDATE(
    (SELECT CONCAT_WS('-', yr_comm, mth_comm, day_comm) FROM ministry), INTERVAL 
    (SELECT FORMAT(yrs_served * 365, 0) FROM prime_minister) YEAR) AS date_left
FROM ministry JOIN prime_minister USING (pm_name)
WHERE party NOT LIKE '%labor%'
AND prime_minister.pm_name = ministry.pm_name
ORDER BY pm_name;
4

1 回答 1

0

你可以使用用户变量

SET @date = CONCAT_WS('-', 2012,1,1);   -- paste your query here
SET @toAdd = (SELECT MONTH(CURDATE())); -- paste your query here
SELECT DATE_ADD(@date, INTERVAL @toAdd DAY) AS date_left

这与

SET @date = CONCAT_WS('-', 2012,1,1);   -- paste your query here
SET @toAdd = (SELECT MONTH(CURDATE())); -- paste your query here
SELECT @date + INTERVAL @toAdd DAY AS date_left

或不使用更长的变量,

SELECT (CONCAT_WS('-', 2012,1,1)) + INTERVAL (SELECT MONTH(CURDATE())) DAY AS date_left
于 2013-01-24T02:07:36.480 回答