gpt4 book ai didi

MySQL 问题 - 试图应对糟糕的数据库结构

转载 作者:行者123 更新时间:2023-11-29 00:39:44 27 4
gpt4 key购买 nike

我发现自己试图通过别人编写的程序来处理糟糕的数据库结构,并且正在尝试编写我的查询来处理这个问题。我正在尝试模拟一个没有已知唯一/主键的 upsert 查询...

DELIMITER //
IF ( ( SELECT COUNT( f_id ) FROM `wp_cformsdata` WHERE field_name='Agent First Name' AND sub_id='395' ) > 0 ) THEN
UPDATE `wp_cformsdata` SET field_val='Shane' WHERE field_name='Agent First Name' AND sub_id='395';
ELSE
INSERT INTO `wp_cformsdata` (sub_id, field_name, field_val) VALUES ( '395', 'Agent First Name', 'Shane' );
END IF;
DELIMITER ;

基本上我的表格布局如下...

+------+--------+------------+-----------+
| f_id | sub_id | field_name | field_val |
+------+--------+------------+-----------+

此表用于存储公司的个别数据。

'f_id' 是该表中唯一的索引键(主键)。我们不知道它的值(value),或者是否存在任何包含数据的键。

'sub_id' 是另一个表的外键,每个公司的条目都包含该外键。

'field_name'是公司信息的名称(eg. Company Name)

'field_val' 是字段的实际值(例如 Google Inc.)

我正在尝试更新这些表中的数据,或者在不存在数据的地方插入数据。由于此表的性质,我无法在任何字段上创建索引。请引用上面的 SQL 以查看我在做什么 - 是的,它有点臃肿。如果您有更好的解决方案,请告诉我!

我已经尝试了 INSERT ... ON DUPLICATE KEY UPDATE upsert 查询,但是这不起作用,因为我们没有唯一键或主键在这里工作。

最佳答案

您实际上将 (sub_id, field_name) 视为复合键。我假设 f_id 是一个自动递增的列?如果是这样,您可以在 (sub_id, field_name) 上定义一个唯一约束:

ALTER TABLE wp_cformsdata ADD UNIQUE mykey (sub_id, field_name)

然后使用 INSERT ... ON DUPLICATE KEY UPDATE 它不仅在存在重复主键时执行 UPDATE 子句,而且在任何其他唯一键约束时执行被侵犯。另请参阅对已接受答案的评论 here .

关于MySQL 问题 - 试图应对糟糕的数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12775292/

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