gpt4 book ai didi

mysql - 更新一个表中的记录以获取另一个表中的寄存器,以逗号分隔的字段

转载 作者:行者123 更新时间:2023-11-30 21:21:58 25 4
gpt4 key购买 nike

我有两个表:

第一个表:

code    store  sent
1000002 Store1 0
1000002 Store2 0
1000002 Store3 0

第二表:

code    stores
1000002 Store1,Store3

我想做的是为特定代码更新 FirstTable.sent,仅针对 SecondTable.stores 中存在的记录

我有一个过程,它接受一个字符串和一个分隔符,并从该字符串构建一个结果集。例如,如果我进行以下调用:

call sp_csv_as_resultset("A,B,C,D", ",");

我得到以下输出作为结果集:

A
B
C
D

我在下一个更新语句中做了那个过程,目的是实现我需要的:

update FirstTable ft
inner join et_sap_magento_store_ids_removals_IF st
on ft.code = st.code
set ft.sent = 1
and ft.sent = 0
and ft.store in (sp_csv_as_resultset(st.stores, ','));

但是如您所知,您不能在 select 中调用存储过程。

我认为函数不能满足我的需求,因为它不能返回表或结果集。有没有一种方法可以在不更改设计的情况下满足我的需求?

最佳答案

MySQL 有一个名为 FIND_IN_SET() 的函数这可以提供帮助。

UPDATE FirstTable AS f
JOIN SecondTable AS s
ON f.code = s.code AND FIND_IN_SET(f.store, stores)
SET f.sent =1
WHERE f.sent = 0;

但是,请注意 FIND_IN_SET() 不能使用索引。在您的情况下,至少连接可以在 code 上使用索引,但在这些匹配中它必须以困难的方式进行扫描。

Stack Overflow 上有很多关于连接逗号分隔字符串的问题。我找不到提到更新查询的问题,否则我会投票决定将您的问题作为重复问题关闭。

当您知道需要在 SQL 条件中引用该列表中的各个条目时,更好的答案是避免存储逗号分隔的字符串。请参阅我对 Is storing a delimited list in a database column really that bad? 的回答

关于mysql - 更新一个表中的记录以获取另一个表中的寄存器,以逗号分隔的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46891553/

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