在FROM子句中使用相同的表两次

时间:2014-09-01 18:17:19

标签: sql

我有一个看起来像这样的表:

1 | 'Frank' | 'A'
2 | 'Frank' | 'B'
3 | 'Tom'   | 'A'
4 | 'Tom'   | 'B'

我想要一个看起来像这样的输出:

Frank | A |乙
汤姆| A |乙

我想出了这个:

SELECT N.Name, N.Surname, M.Surname
FROM NAMES N, NAMES M
WHERE N.Surname = 'B' AND M.Surname = 'A'
GROUP BY N.Name;

这似乎有效,但我不知道在FROM子句中使用同一个表两次是否是一个好习惯,或者在大型表上性能会受到影响。

是否有更简单的解决方案?

1 个答案:

答案 0 :(得分:0)

from后面放置多个表格是老式的:您可以使用标准join语法使on更具可读性:

from    Names n
join    Names m
on      n.name = m.name

限制条件下的自我加入并不太昂贵。 Name是一个相当严格的条件:只有2条记录将共享该名称。

您可以在支持row_number()的数据库中更有效地编写它。这使您可以在没有join的情况下运行查询:

select  Name
,       max(case when rn = 1 then Surname end) as Surname1
,       max(case when rn = 2 then Surname end) as Surname2
,       max(case when rn = 3 then Surname end) as Surname3
from    (
        select  row_number() over(
                    partition by Name
                    order by Surname) as rn
        ,       Name
        ,       Surname
        from    YourTable
        ) SubQueryAlias
group by
        Name