首页 > 解决方案 > INNER JOIN 结果的别名以及同时连接的两个表的别名

问题描述

USE [MasterDB]

GO
CREATE proc  dbo.ProductPropertiesInsert
AS
SET NOCOUNT ON;

INSERT INTO [MasterDB].[Main].[Property]
SELECT vp.Product_ID, vp.Property_ID
FROM ( SELECT * FROM [MasterDB].[Product].[Report] vr INNER JOIN [MasterDB].[Main].[Product] jt ON vr.vin=v.VIN )
     cross apply (values (208, jt.id, jt.IsExclusive), 
                         (209, jt.id, jt.IsNew),
                         (213, jt.id, jt.IsPremium)) 
                         vp(Property_ID, Product_ID, property)
WHERE vp.property=1
      /* optional code? */
      and not exists(select 1 
                     from [HGregoireCentral].[Main].[Property] p_in
                     where vp.id=p_in.id
                           and vp.Property_ID=p.Property_ID);
GO

我有这个存储过程,但我想知道 jt 的别名是内部联接的别名还是 [MasterDB].[Main].[Product] 的别名。

我在 vr.vin=v.VIN 上加入它,v 代表 [MasterDB].[Main].[Product],但是因为 v 没有定义并且我需要交叉应用语句的内部连接,所以我不是确定如何正确地做到这一点。到目前为止,我认为该语句行不通,因为我需要内部联接的结果和表 [MasterDB].[Main].[Product] 的别名。

你怎么做到这一点?

报告表

vin isNew isExclusive isPremium 
11   1       1          0  
12   0       0          1 
13   1       0          1 

主表(用于获取属性表的属性id)

vin id 
11  10 
12  11 
13  12 

属性表(我需要为第一个表中的每个 propertyId 插入行)

id propertyId 
10 1 
10 2 
11 3 
12 1 
12 3

标签: sql-serversql-server-2008subqueryinner-joinsql-insert

解决方案


我不确定您的查询是否是有效的 SQL Server 代码:

  • 子句中的子查询from不是别名

  • jt在子查询中定义,不应在外部查询中可用。

但基本上,我认为你根本不需要那个子查询。您可以将连接展平,例如:

INSERT INTO [MasterDB].[Main].[Property]
SELECT vp.Product_ID, vp.Property_ID
FROM [MasterDB].[Product].[Report] vr 
INNER JOIN [MasterDB].[Main].[Product] jt ON jt.vin = vr.VIN
CROSS APPLY (VALUES 
    (208, jt.id, jt.IsExclusive), 
    (209, jt.id, jt.IsNew),
    (213, jt.id, jt.IsPremium)
) vp(Property_ID, Product_ID, property)
WHERE 
    vp.property=1
    AND NOT EXISTS (
        SELECT 1 
        FROM [HGregoireCentral].[Main].[Property] p_in
        WHERE vp.id = p_in.id AND vp.Property_ID = p_in.Property_ID
    )

请注意,我还修复了子查询中不正确的表别名p-NOT EXISTS大概是您的意思p_in。中的别名v也是如此join


推荐阅读