我有一个包含两列的表:id(int)、data(text)
data 包含一个字符串数组。我想在其中插入字符串,如果它们不存在的话。
搜索了一下,想出了这个:
INSERT INTO schema_name.table_name(id, data) VALUES(1, '["3"]')
ON DUPLICATE KEY UPDATE data= IF(JSON_CONTAINS(data,'3', '$'), JSON_ARRAY_APPEND(data, '$', '3'), data)
它不会将“3”插入数据,无论它是否已经存在。它不会返回错误。我想知道我应该怎么做,为什么这不起作用
谢谢
我想你忘记添加
!
了,检查下面的例子它添加了除 [1-4] 之外的任何新数字。这是 Users 和 Messages 之间简单的一对多关系。通过 having
user_id
in themessages
table和haveINDEX(user_id)
on that table 可以轻松有效地实现它。没有 JSON(为此目的);不慢。固定它。有两个问题:
由于某些原因,如果我想检查数组中是否存在字符串“3”,我需要将 JSON_CONTAINS“3”作为第二个参数,而不是“3”。但是,对于 JSON_ARRAY_APPEND,“3”就足够了。
我调换了 IF 语句的第二个和第三个参数。正如@Niyaz 指出的那样。
此查询有效:
当 2 天的等待期结束时,将把它设置为 AA