Объединение ярлыков для 2 столбцов таблицы и идентичный запрос? - PullRequest
0 голосов
/ 30 апреля 2019

Представьте себе таблицу, состоящую из имени, отчества и фамилии.

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

Один из способов сделать это -

Select FirstName From Names Where LastName in (HISTSNEROIP)
Union
Select MiddleName From Names Where LastName in (HISTSNEROIP)

Где HISTSNEROIP означает «огромный неэффективный подзапрос, который не должен запускаться ни разу»если возможно'.Как следует из названия, запуск его в два раза больше, чем указано выше, - это большое нет-нет.

В идеале я хотел бы сделать что-то вроде

Select FirstName and MiddleName from names where Lastname in (HISTSNEROIP)

Где 'и' заменяется тем, что ускользает от инструментая.

Ответы [ 3 ]

1 голос
/ 01 мая 2019

Вы можете использовать CTE :

with cte (
  HISTSNEROIP
)
select firstname from names where lastname in cte
union all
select middlename from names where lastname in cte

Таким образом HISTSNEROIP запускается только один раз.

1 голос
/ 01 мая 2019

Как-то так должно работать ..

SELECT f_m 
FROM (
    SELECT FirstName as f_m, LastName FROM names
    UNION 
    SELECT MiddleName as f_m, LastName FROM names
) as T
WHERE T.LastName in (HISTSNEROIP);
0 голосов
/ 30 апреля 2019

Почему бы вам не выбрать это в одном запросе?

Select FirstName, MiddleName
From Names
Where LastName in (HISTSNEROIP)

Если вам нужно, вы можете отключить это:

Select (case when x.n = 1 then FirstName else MiddleName end)
From Names n cross join
     (select 1 as n union all select 2 as n) x
Where LastName in (HISTSNEROIP)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...