我有一个复杂的选择查询与许多联接。它是从一个工具生成的。我必须根据该查询更新字段。SQL UPDATE复杂选择查询声明
我试图解码它,但不知道基于我的解码更新是正确的。我可以根据工具生成的查询更新值吗?如下图所示: -
UPDATE F_Sales SET d_source = "XYZ" WHERE
F_Sales.customer_code in (SELECT A, B, C, D......... FROM K, L, M, N, O,P ....)
我有一个复杂的选择查询与许多联接。它是从一个工具生成的。我必须根据该查询更新字段。SQL UPDATE复杂选择查询声明
我试图解码它,但不知道基于我的解码更新是正确的。我可以根据工具生成的查询更新值吗?如下图所示: -
UPDATE F_Sales SET d_source = "XYZ" WHERE
F_Sales.customer_code in (SELECT A, B, C, D......... FROM K, L, M, N, O,P ....)
create table #temp(customer_code INT)
insert into #temp SELECT A, B, C, D......... FROM K, L, M, N, O,P ....
UPDATE F_Sales SET d_source = "XYZ"
FROM F_Sales join #temp ON
F_Sales.customer_code = #temp.customer_code
但是这个查询可能会失败,我需要弄清楚一张桌子的确切场景。 – RanchiRhino
提供的A,B, ..
列(例如列D
)中的一个可以被映射到F_Sales.customer_code
UPDATE F_Sales SET d_source = "XYZ"
WHERE
F_Sales.customer_code in (
SELECT D
FROM (-- untouched original query
SELECT A, B, C, D......... FROM K, L, M, N, O,P ....) q
)
或
UPDATE F_Sales SET d_source = "XYZ"
FROM F_Sales
JOIN (-- untouched original query
SELECT A, B, C, D......... FROM K, L, M, N, O,P ....) q
ON F_Sales.customer_code = q.D
也许我们可以让它变得更好如果您可以显示生成的查询
您可以使用CTE或临时表,使其更具可读性。你可以加入它以避免IN – Leonidas199x
你不能使用'IN(SELECT A,B,C,D ...',因为'IN'子句只能与单个列相比较, d需要把所有的值写在一个列中,像这样写 – Tanner
我可以看到它可能仍然有泄漏,因为它类似于UPDATE语句,where子句与单列相比 – RanchiRhino