Подзапрос, возвращающий несколько столбцов - PullRequest
2 голосов
/ 29 августа 2009

Я пишу выбранный подзапрос, который возвращает COUNT. Однако мне нужно использовать предложение HAVING в подзапросе, и в результате необходимо указать этот столбец в моем подзапросе SELECT. В результате у меня есть 2 столбца: COUNT и column_for_having_clause.

Есть ли способ, которым я могу сказать SQL, чтобы взять только первый столбец. Я получаю сообщение об ошибке Msgstr "Операнд должен содержать 1 столбец (столбцы)". Я полагаю, что это должно быть распространенной проблемой, кто-нибудь знает способ обойти это?

Кроме того, есть ли способ выполнить предложение HAVING без указания столбца в запросе SELECT?

Спасибо!

Ответы [ 2 ]

1 голос
/ 29 августа 2009

Конечно, вы можете указать практически любое выражение в предложении HAVING. Это не обязательно должен быть столбец из списка выбора.

SELECT ...
FROM foo
WHERE x = (SELECT COUNT(*) FROM bar 
           GROUP BY y HAVING y = MAX(y));

Но вы также можете, если вы сравниваете число с чем-то во внешнем запросе, сравнивайте кортежи.

SELECT ...
FROM foo
WHERE (x, 1) = (SELECT COUNT(*), y = MAX(y) AS is_max FROM bar
                GROUP BY y HAVING is_max = 1);
1 голос
/ 29 августа 2009

Вы могли бы сделать

SELECT blah FROM foo WHERE bar = (SELECT cnt FROM (SELECT cnt, column_for_having_clause FROM table .... HAVING ... LIMIT 1))

Довольно некрасиво, однако.

...