2列表和相同查询的联合快捷方式?

问题描述 投票:0回答:3

因此,想象一下由第一个,中间名和姓氏组成的表。

我想编写一个查询,返回所有中间名和名字,作为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)

哪里'和'被任何工具所取代。

mysql sql
3个回答
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);

1
投票

你可以使用CTE

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

这样HISTSNEROIP只运行一次。


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)

推荐问答