sql-server - 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 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
。
推荐阅读
- cmake - 将 c 样式字符串传递给 CMakeList.txt 中的源
- android - 为什么以编程方式绝对视图位置不是绝对的?
- r - 基于特定列的许多 CSV 文件的交集
- javascript - 用图表显示许多统计图表
- mysql - 如何在select中设置执行时间限制,但最终返回结果
- python - 尝试对谷歌云平台 (GCP) 进行身份验证以使用语音转文本 API
- python - 如何使在特定时间后到期的当前会话提前到期?
- python - 使用 FPDF 将可变内容写入新 PDF
- angular - 无法在 Angular 中使用 noty
- python - tensorflow_hub:带有检查点路径的模块规范导出不会保存所有变量