代码之家  ›  专栏  ›  技术社区  ›  fdmillion

两个子查询上的T-SQL完全外部连接还是任意静态值?

  •  0
  • fdmillion  · 技术社区  · 7 年前

    SELECT * FROM (SELECT 'Today' AS Txt) t1
    FULL OUTER JOIN (SELECT * FROM (SELECT GETDATE() AS D) t2)
    -- desired result is one row with a 'Txt' column with value 'Today' and a 'D' column with the result of the GETDATE function
    

    还有一个:

    SELECT * FROM (SELECT * FROM dbo.myTableFunc()) t1 -- returns 5 rows
    FULL OUTER JOIN (SELECT * FROM (SELECT * FROM dbo.myOtherTableFunc())) t2 -- also returns 5 rows
    

    我不知道怎么做的是在两个子查询上进行“外部连接”。在第一个示例中,我基本上尝试将两个标量的结果合并为一行结果。在第二个例子中,我尝试取两个表,每个表有五行,并合并它们的列,而这两个表中的数据之间没有任何关系。

    在上述两种情况下,我在外部连接中的结束符号周围都会出现语法错误。

    1 回复  |  直到 7 年前
        1
  •  1
  •   pcdev    7 年前

    你只是错过了连接条件。在第一个示例中,连接条件为“始终”,或1=1:

    SELECT * FROM (SELECT 'Today' AS Txt) t1
    FULL OUTER JOIN (SELECT * FROM (SELECT GETDATE() AS D) t2) t2 on 1=1
    

    在第二个示例中,您不希望每个数据集中的行之间有任何关系——好吧,如果您想连接它们,那么就需要有一些关系,即使这是虚假的。使用这样的行号可以工作(假设您有一个唯一的列,名为 Id

    select * from (
        select row_number() over (order by Id asc) rn, * from dbo.myTableFunc()
    ) t1
    full join (
        select row_number() over (order by Id asc) rn, * from dbo.myOtherTableFunc()
    ) t2 on t1.rn=t2.rn
    
    推荐文章