Ошибка SQL: операнд должен содержать 1 столбец
Работая над системой, которую я создаю, я попытался использовать следующий запрос в моем проекте:
SELECT WEEKLY_TOTALS.DOMAIN, WEEKLY_TOTALS.CATEGORY, DAY
FROM(
(SELECT DOMAIN,CATEGORY,DAY,CNT FROM BASE_DATA) AS DAY_CNTS
INNER JOIN
(SELECT DOMAIN,CATEGORY,SUM(CNT) AS TOT FROM BASE_DATA
GROUP BY DOMAIN,CATEGORY) AS WEEKLY_TOTALS
ON (DAY_CNTS.DOMAIN = WEEKLY_TOTALS.DOMAIN,
DAY_CNTS.CATEGORY = WEEKLY_TOTALS.CATEGORY)
)
Этот запрос, однако, дает мне ошибку: "#1241 - операнд должен содержать 1 столбец (столбцы)
Что меня озадачивает, так это то, что я думаю, что этот запрос не сработает. Выбор столбцов, затем выбор еще двух из другой таблицы и продолжение с этого момента. Я просто не могу понять, в чем проблема.
Есть ли простое исправление этого или другой способ написать мой запрос?
2 ответа
Ваши скобки отключены, и вам нужны псевдонимы таблиц для подзапросов, и вам нужно AND
вместо запятой в on
пункт.
На самом деле, вам не нужен первый подзапрос:
SELECT
WEEKLY_TOTALS.DOMAIN, WEEKLY_TOTALS.CATEGORY, DAY_CNTS.DAY
FROM
BASE_DATA DAY_CNTS
INNER JOIN
(SELECT
DOMAIN, CATEGORY, SUM(CNT) AS TOT
FROM
BASE_DATA
GROUP BY
DOMAIN, CATEGORY) WEEKLY_TOTALS ON DAY_CNTS.DOMAIN = WEEKLY_TOTALS.DOMAIN
AND DAY_CNTS.CATEGORY = WEEKLY_TOTALS.CATEGORY;
Кроме того, если это на SQL Server, DAY
является зарезервированным словом, поэтому оно должно быть соответствующим образом экранировано.
Вы должны использовать [ДЕНЬ] вместо Дня в вашем запросе:
SELECT WEEKLY_TOTALS.DOMAIN, WEEKLY_TOTALS.CATEGORY, [DAY]
FROM(
(SELECT DOMAIN,CATEGORY,[DAY],CNT FROM BASE_DATA) AS DAY_CNTS
INNER JOIN
(SELECT DOMAIN,CATEGORY,SUM(CNT) AS TOT FROM BASE_DATA
GROUP BY DOMAIN,CATEGORY) AS WEEKLY_TOTALS
ON (DAY_CNTS.DOMAIN = WEEKLY_TOTALS.DOMAIN,
DAY_CNTS.CATEGORY = WEEKLY_TOTALS.CATEGORY)
)