如何引用“多表来源”中的第一个表?

时间:2018-08-24 13:00:52

标签: sql sql-server tsql join concat

我正在尝试使用Multi Table From语句来比较同一表的两个不同过滤视图中的所有记录。结果似乎是我所期望的,但是当我尝试使用concat()连接另一个表以创建组合键SSMS时,将返回以下错误。

错误:

  

无法绑定多部分标识符“ a.ccustno1”。

示例代码:

Select *
  From (Select ccustno AS 'ccustno1' 
          From table1 
         Where orderdate = cast(Getdate() AS Date)) a, 
               (Select ccustno AS 'ccustno2' 
                  From table1 
                 Where (orderdate >= dateadd(day, 0, getdate()))) b
           Join table2 c 
             ON c.custkey = concat(a.ccustno1, b.ccustno2)

上下文和其他问题:

对于结果,我试图在第一个过滤视图中生成一个与第二个过滤视图中的所有客户内联的所有客户的列表,以便我可以添加第三个表来详细说明彼此之间的相对距离。第一个表是今天(第一个视图)和今天(第二个视图)之后过滤的订单的列表。第二张表使用纬度和经度来计算径向距离,并按我们愿意按县分多订购的距离进行过滤。我想使用今天订单的位置来告诉我,为了提高效率,我们今天可以合理地交付其他哪些现有订单。

有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

不要使用逗号联接。与显式联接相比,它们以不可预测的顺序发生,在这种情况下,系统尝试在{em>交叉联接之​​前在bc之间执行联接。在a和加入bc的结果之间。

改为使用显式交叉联接:

Select *
From (Select ccustno AS ccustno1 
      From table1 
     Where orderdate = cast(Getdate() AS Date)) a
       cross join
           (Select ccustno AS ccustno2 
              From table1 
             Where (orderdate >= dateadd(day, 0, getdate()))) b
       Join table2 c 
         ON c.custkey = concat(a.ccustno1, b.ccustno2)

(我仍然不确定最终加入条件是否使有意义,因为我不希望能够接受两个客户编号(假设我正确解释了您的姓名)并进行连接他们一起制作客户密钥)