【问题标题】:SQL Server self join for virtual table虚拟表的 SQL Server 自联接
【发布时间】:2015-04-02 19:12:58
【问题描述】:

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

    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。

谢谢!

【问题讨论】:

  • 虚拟表是什么意思?
  • 虚拟表来自 SQlite,在 MS SQL 中我们可以使用临时表,是的,我们可以在临时表之间使用联合。

标签: sql sql-server self-join


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      相关资源
      最近更新 更多