2017-09-05 116 views
-1

我有一个复杂的选择查询与许多联接。它是从一个工具生成的。我必须根据该查询更新字段。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 ....) 
+1

您可以使用CTE或临时表,使其更具可读性。你可以加入它以避免IN – Leonidas199x

+0

你不能使用'IN(SELECT A,B,C,D ...',因为'IN'子句只能与单个列相比较, d需要把所有的值写在一个列中,像这样写 – Tanner

+0

我可以看到它可能仍然有泄漏,因为它类似于UPDATE语句,where子句与单列相比 – RanchiRhino

回答

1
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 
+0

但是这个查询可能会失败,我需要弄清楚一张桌子的确切场景。 – RanchiRhino

0

提供的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 

也许我们可以让它变得更好如果您可以显示生成的查询