Есть ли способ сократить этот запрос? - PullRequest
2 голосов
/ 16 июня 2011

У меня есть такой запрос:

SELECT Name,  
REPLACE(RTRIM((
                SELECT CAST(Score AS VARCHAR(MAX)) + ' ' 
                FROM 
                    (SELECT Name, Score
                    FROM table
                    WHERE 
                    ---CONDITIONS---
                    ) AS InnerTable             
                WHERE (InnerTable.Name = OuterTable.Name) FOR XML PATH (''))),' ',', ') AS Scores
FROM table AS OuterTable
WHERE 
---CONDITIONS---
GROUP BY Name;

Как видно, я использую тот же набор условий для получения InnerTable и OuterTable.Есть ли способ сократить этот запрос?Я спрашиваю об этом, потому что некоторое время назад я увидел ключевое слово USING в MySQL, которое упростило мою жизнь, используя который вы можете указать запрос один раз, а затем использовать его псевдоним для остальной части запроса.

1 Ответ

3 голосов
/ 16 июня 2011

Вы можете посмотреть на создание общего табличного выражения (CTE). Это ваш лучший выбор для псевдонимов избранных. К сожалению, я не уверен, насколько шутер сделает ваш запрос, хотя он не позволяет вам дважды определить условия where. см. ниже:

with temp as
(
   SELECT Name, Score
   FROM table
   WHERE whatever = 'whatever'
)

SELECT Name,  
REPLACE(RTRIM((
                SELECT CAST(Score AS VARCHAR(MAX)) + ' ' 
                FROM 
                    (SELECT Name, Score
                    FROM temp                    ) AS InnerTable             
                WHERE (InnerTable.Name = OuterTable.Name) FOR XML PATH (''))),' ',', ') AS Scores
FROM temp AS OuterTable
GROUP BY Name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...