SQL Server自连接虚拟表

时间:2015-04-02 10:29:04

标签: sql sql-server self-join

我可以自己加入“虚拟”表(某些表的联合结果)吗?

    SELECT
      [VIRTUAL_TABLE].[Name]  AS [name],
      [VIRTUAL_TABLE].[ID]    AS [id]
    FROM (
       SELECT
        ...
       FROM [...]

       UNION

       SELECT
        ...
       FROM [...]
    ) AS [VIRTUAL_TABLE]
    -- INNER JOIN [VIRTUAL_TABLE] ON ... ???

我正在使用SQL Server。

感谢名单!

2 个答案:

答案 0 :(得分:2)

是的,您可以使用公用表表达式(CTE)执行此操作:

with virtualTable as(
   SELECT
    ...
   FROM [...]

   UNION

   SELECT
    ...
   FROM [...]
) 
select vt1.field,
       vt2.field
from   virtualTable vt1 join virtualTable vt2 on vt1.someField = vt2.otherField

答案 1 :(得分:0)

如果您想以经典方式编写它,则必须复制TSQL代码。但是,您可以使用CTE。

也许该代码可以解决您的问题:

SELECT VIRTUAL_TABLE_1.*
FROM (SELECT 'James' NAME, '12' ID) AS VIRTUAL_TABLE_1,
     (SELECT 'James' NAME, '12' ID) AS VIRTUAL_TABLE_2
WHERE VIRTUAL_TABLE_1.ID = VIRTUAL_TABLE_2.ID