gpt4 book ai didi

sql - 带子查询的 LEFT JOIN 和访问 select 子句中的主表列

转载 作者:行者123 更新时间:2023-12-05 05:19:44 24 4
gpt4 key购买 nike

我有一个如下所示的插入语句,它得到语法错误 “无法绑定(bind)多部分标识符“t2.Col1”。”。我过度简化了声明,如下所示:

INSERT INTO dbo.T1
(
Col1,
Col2,
Col3
)
SELECT
t2.Col1,
SUBSTRING(aCase.CaseColumn, 0, CHARINDEX('%', aCase.CaseColumn)), --I expect this line gets the value "2"
SUBSTRING(aCase.CaseColumn, CHARINDEX('%', aCase.CaseColumn) + 1, LEN(aCase.CaseColumn) - CHARINDEX('%', aCase.CaseColumn)) --I expect this line gets the value "3"
FROM
dbo.T2 t2
LEFT JOIN
(
SELECT
CASE --I have hundreds of WHEN conditions below and need to access the parent T2 tables' properties
WHEN t2.Col1 = 1 THEN '2%3' --This line has a syntax error of "the multi-part identifier "t2.Col1" could not be bound."
END AS CaseColumn
)
AS aCase ON 1 = 1

我将 LEFT JOINCASE 一起使用的原因是我有数百个条件,我需要为不同的列选择不同的值。我不想对所有列一遍又一遍地重复相同的 CASE 语句。因此,我使用单个 CASE 将值与定界符连接起来,然后解析连接后的字符串并将适当的值放在适当的位置。

最佳答案

你可以做的是使用 OUTER APPLY,因为它允许你的 dbo.T2aCase 结果集相关,就像这样:

INSERT INTO dbo.T1
(
Col1,
Col2,
Col3
)
SELECT
1,
SUBSTRING(aCase.CaseColumn, 0, CHARINDEX('%', aCase.CaseColumn)), --I expect this line gets the value "2"
SUBSTRING(aCase.CaseColumn, CHARINDEX('%', aCase.CaseColumn) + 1, LEN(aCase.CaseColumn) - CHARINDEX('%', aCase.CaseColumn)) --I expect this line gets the value "3"
FROM
dbo.T2 t2
OUTER APPLY
(
SELECT
CASE --I have hundreds of WHEN conditions below and need to access the parent T2 tables' properties
WHEN t2.Col1 = 1 THEN '2%3'
END AS CaseColumn
)
AS aCase ON 1 = 1

那是因为子查询的结果本身不是独立的,必须根据dbo.T2表的值来定义。

阅读有关OUTER APPLYCROSS APPLY 的更多信息 on this thread .

第 3 条,“重用表别名”与您的情况类似,链接到它的文章完美地解释了如何在这些情况下使用cross apply/outer apply

关于sql - 带子查询的 LEFT JOIN 和访问 select 子句中的主表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45561616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com