Вложенный MySQL Query w/ concat и adddate

Я пытаюсь вложить несколько запросов, но до сих пор получаю сообщение об ошибке 1242: подзапрос возвращает более 1 строки. Я хочу более одного ряда, так как я работаю над несколькими записями.

У меня есть 2 таблицы. У одного есть дата начала, сохраненная в 3 столбцах; yr_comm, mth_comm, day_comm. Во 2-й таблице указан период обслуживания (в годах) для ряда пользователей, который выражается целым числом (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, чтобы добавить сервис дней к дате начала

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;

1 ответ

Вы можете использовать пользовательские переменные

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
Другие вопросы по тегам