我发现自己试图通过其他人编写的程序来应对糟糕的数据库结构,并试图编写我的查询来应对这种情况。我正在尝试模拟一个没有已知唯一/主键的 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' 是该表中唯一的索引键(主键)。我们不知道它的价值,或者是否存在任何包含数据的键。
“sub_id”是另一个表的外键,每个公司的条目都包含该表。
'field_name' 是公司信息的名称(例如,公司名称)
'field_val' 是字段的实际值(例如 Google Inc.)
我正在尝试更新这些表中的数据,或者在数据不存在的地方插入。由于此表的性质,我无法在任何字段上创建索引。请参考上面的 SQL 来看看我在做什么——是的,它有点臃肿。如果您有更优化的解决方案,请告诉我!
我尝试了INSERT ... ON DUPLICATE KEY UPDATE
upsert 查询,但这不起作用,因为我们没有唯一键或主键可以在这里工作。