【发布时间】:2021-01-29 10:04:27
【问题描述】:
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
【问题讨论】:
-
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)的 SQL,并以表格格式作为代码输入。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。
-
您的问题是什么? PS你是什么意思,“别名”?你的意思是,jt 是评估内部连接的结果还是只是它的正确参数?后者。但是为什么会是前者,为什么不是后者呢?如果你不给出你的推理,我们就找不到你的误解,你只是要求重写一个介绍/手册,这太宽泛了,而且是重复的。但是,如果这是您的问题,请研究并提出问题,不要提供所有这些代码。并在你的总体目标之前询问意想不到的结果。你在这里混合一堆问题,问一个特定的研究过的非重复问题。
标签: sql-server sql-server-2008 subquery inner-join sql-insert