gpt4 book ai didi

mysql - 同一查询中的 update 和 2 select 语句导致错误

转载 作者:行者123 更新时间:2023-11-29 12:03:02 26 4
gpt4 key购买 nike

我有一个带有字段 c_id 的表,其中包含具有某些 CustomerIds 值的条目。如果这些客户 ID 根据表无效,我需要将它们设置为 null。

我正在使用以下查询。但它似乎抛出一个错误:

update Customers set c_id=NULL where customer_id in (select customer_id from Customers where c_id not in (select customer_id from Customers);

有人可以帮我找出问题所在

最佳答案

我避免了 IN 并使用 JOINS 来微调您的代码:

UPDATE CUST SET C_Id = NULL 
FROM Customers CUST
LEFT JOIN Customers LJC ON LJC.Customer_Id = CUST.C_Id
WHERE LJC.Customer_Id IS NULL

SQL fiddle :http://sqlfiddle.com/#!3/59fb1/5

我解释一下我做了什么:

Customers表创建了虚拟表和数据:

CREATE TABLE Customers (
Customer_Id INT,
C_Id INT
)

INSERT INTO Customers
SELECT 1, 11 UNION
SELECT 2, 22 UNION
SELECT 22, 3 UNION
SELECT 11, 4 UNION
SELECT 5, 6 UNION
SELECT 7, 8 UNION
SELECT 3, 9

此处 11、22 和 3 存在于 Customer_Id、C_Id 中,因此根据您的请求,其他 C_Id 4、6、8 和 9 不存在于Customer_IdUPDATENULL

下面的 block 将返回Customer_Id中不存在的C_Id

SELECT C1.C_Id
FROM Customers C1
LEFT JOIN Customers C2 ON C2.Customer_Id = C1.C_Id
WHERE C2.Customer_Id IS NULL

下面的 block 将从上面的 SELECT block 中将 C_Id 更新为 NULL

UPDATE Customers SET C_Id = NULL 
WHERE C_Id IN (
SELECT C1.C_Id
FROM Customers C1
LEFT JOIN Customers C2 ON C2.Customer_Id = C1.C_Id
WHERE C2.Customer_Id IS NULL
)

从上面的 block 中,如果我删除 IN 并使用 JOIN 进行修改,则会出现我在顶部给出的查询。

关于mysql - 同一查询中的 update 和 2 select 语句导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32034133/

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