因此,想象一个由名字,中间名和姓氏组成的表。
我想编写一个查询,将姓氏呈现出一种完全神秘,复杂的质量的人的所有中间名和姓氏作为一列返回,需要确定20个左右的嵌套子查询。
一种实现方法是
Select FirstName From Names Where LastName in (HISTSNEROIP)
Union
Select MiddleName From Names Where LastName in (HISTSNEROIP)
HISSNEROIP代表“巨大的低效率子查询,如果可能的话甚至不应该运行一次”。顾名思义,两次以上运行是一个很大的禁忌。
理想情况下,我会做类似的事情
Select FirstName and MiddleName from names where Lastname in (HISTSNEROIP)
“ and”被任何我无法理解的工具取代。
答案 0 :(得分:1)
您可以使用CTE:
with cte (
HISTSNEROIP
)
select firstname from names where lastname in cte
union all
select middlename from names where lastname in cte
这样HISTSNEROIP只运行一次。
答案 1 :(得分:1)
类似的东西应该起作用。
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);
答案 2 :(得分:0)
为什么不在一个查询中选择它?
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)