如何在插入内部使用select for duplicate duplicate update part?
我认为这样,但事实并非如此。然而,选择部分可以自行运行。
insert into tags (tag) values ('sony') ON DUPLICATE KEY UPDATE total = (
select count(*) from items where FIND_IN_SET(tag, tags)
) WHERE tag IN ('sony');
项
"id" "tags" "category"
"1" "sony,pioneer,philips" "1"
"2" "sony,pioneer" "1"
"3" "sony" "1"
"4" "bose,sony" "1"
"5" "bose" "1"
"6" "bose" "1"
代码
"id" "tag" "total" "category"
"1" "sony" "0" "1"
"2" "pioneer" "0" "1"
"3" "philips" "0" "1"
"4" "bose" "0" "0"
答案 0 :(得分:0)
尝试修复括号:
insert into tags(tag)
values ('sony')
ON DUPLICATE KEY UPDATE total = (select count(*)
from items
where FIND_IN_SET(tag, tags) and
tag IN ('sony')
);
最后的where
子句应该导致语法错误。
编辑:
如果您想要insert
中的值,可以尝试:
insert into tags(tag)
values ('sony')
ON DUPLICATE KEY UPDATE total = (select count(*)
from items
where FIND_IN_SET(VALUES(tag), tags)
);
我没有在子查询中尝试过这个,但VALUES()
在表达式中起作用。
答案 1 :(得分:0)
INSERT INTO tags (tag)
VALUES ('sony')
ON DUPLICATE KEY UPDATE
total = (
SELECT COUNT(*)
FROM items
WHERE FIND_IN_SET('sony', tags)
)
条件tag IN ('sony')
不是必需的,因为ON DUPLICATE KEY UPDATE
更新了行,tag = 'sony'
- 因为此行报告重复。
答案 2 :(得分:0)
我从未在INSERT ... ON DUPLICATE KEY
语句中使用子查询作为表达式。 (如果这是有效的,那么Rimas的答案中的模式,或者Gordon的第二个例子中的模式,将是你想要的。)
我觉得奇怪的是,仅在UPDATE操作中为total
列分配了值,而不是INSERT操作。
就个人而言,我更倾向于将一个值分配给INSERT上的total
列。我会做这样的事情:
INSERT INTO tags (tag,total)
SELECT 'sony', (SELECT COUNT(*) FROM items i WHERE FIND_IN_SET('sony',i.tags))
ON DUPLICATE KEY UPDATE total = VALUES(total)