2列表的统一快捷方式和相同的查询?

时间:2019-04-30 20:48:17

标签: mysql sql

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

我想编写一个查询,将姓氏呈现出一种完全神秘,复杂的质量的人的所有中间名和姓氏作为一列返回,需要确定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”被任何我无法理解的工具取代。

3 个答案:

答案 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)