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

Mysql 表和相同查询的两列的联合快捷方式?,mysql,sql,Mysql,Sql,因此,想象一个由名字、中间名和姓氏组成的表 我想写一个查询,返回所有中间名和名字,作为一列,这些人的姓氏呈现出一种完全神秘、复杂的性质,需要20个嵌套子查询左右才能确定 一种方法是 Select FirstName From Names Where LastName in (HISTSNEROIP) Union Select MiddleName From Names Where LastName in (HISTSNEROIP) 其中HISTSNEROIP代表“如果可能,甚至不应该运行一次的

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

我想写一个查询,返回所有中间名和名字,作为一列,这些人的姓氏呈现出一种完全神秘、复杂的性质,需要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)

其中“and”被我无法使用的任何工具替换。

为什么不在一个查询中选择此选项

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)

为什么不在一个查询中选择此选项

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)
您可以使用:

这样HISTSNROIP只运行一次。

您可以使用:


这样HISTSNROIP只运行一次。

类似的功能应该可以运行

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);

像这样的东西应该有用

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);

您的MySql版本是什么?MySql的v8.0.15版本是什么?MySql的v8.0.15版本需要一列名称,第一列或中间列。而且,我们有一个愚蠢的政策,尽可能避免流量控制。我的上级可能更喜欢20次执行HISTSNEROIP而不是使用它…@ThanosMaravel。第二个解决方案提供了一个名称列表。我知道,但它有“case”,它可以作为所述哑策略的流控制。我需要一列名称,第一列或中间列。而且,我们有一个愚蠢的政策,尽可能避免流量控制。我的上级可能更喜欢20次执行HISTSNEROIP而不是使用它…@ThanosMaravel。第二个解决方案提供了一个单一的名称列表。我知道,但它有“case”,它可以作为上述哑策略的流控制。好吧,我喜欢这个答案,但结果表明服务器的sql版本低于我的客户端。我没有CTE!很抱歉搞混了。好吧,我很喜欢这个答案,但事实证明服务器的sql版本低于我的客户端。我没有CTE!抱歉搞混了,这是我的错。这是如此巧妙,非常简单,我觉得自己很愚蠢,没有想到它。不用担心!发生在我们所有人身上。很高兴它成功了。这是如此巧妙,非常简单,我觉得自己很愚蠢,没有想到它。不用担心!发生在我们所有人身上。很高兴它成功了