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