SQL 服务器自加入虚拟 table

SQL Server self join for virtual table

我可以自己加入 "virtual" table(一些 table 联合的结果)吗?

    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 服务器。

谢谢!

是的,您可以使用常见的 table 表达式 (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

如果您想经典地编写它,则必须复制您的 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