MySQL GROUP_CONCAT()中的多个更新

时间:2014-09-14 10:04:35

标签: mysql sql group-concat

使用GROUP_CONCAT()时我在这里堆叠。

UPDATE db SET Video = 'YES' 
WHERE markedAS IN (SELECT GROUP_CONCAT(markedAS SEPARATOR ',') from (sub-query));

当我运行(sub-query)时,它会给我一些结果(Bob , John , Rob , Tom , Dave)

但事实是,它并非以' QUOTE开头,并且不会以' QUOTE结束。这就是为什么它没有更新。

我们知道,就像这个SQL一样;

 UPDATE staff
     SET salary = 1200
     WHERE name IN ('Bob', 'Jane', 'Frank', 'Susan', 'John');

我的意思是每个名字都带有单引号,它有效。

当我尝试在获取这些子查询结果并使用更新SQL代码运行它们之后手动更新时,它可以正常工作。

我的问题是:如何才能获得那些GROUP_CONCAT()结果,首先是单引号符号,最后是单符号?

例如我想要这样; ('Bob','John','Rob','Tom','Dave'

但不喜欢这个; (Bob','John','Rob','Tom','Dave

谢谢!

2 个答案:

答案 0 :(得分:1)

你可以做到这一点:

UPDATE db SET Video = 'YES' 
WHERE (SELECT concat(',',GROUP_CONCAT(markedAS SEPARATOR ','),',') from (sub-query))
   like concat('%,',markedAS,',%);

或使用find_in_set()

UPDATE db SET Video = 'YES' 
WHERE find_in_set(markedAS,(SELECT concat(',',GROUP_CONCAT(markedAS SEPARATOR ','),',') from (sub-query)));

虽然确实不需要使用GROUP_CONCAT

UPDATE db SET Video = 'YES' 
WHERE markedAS in (SELECT markedAS from (sub-query));

答案 1 :(得分:0)

如果没有拼写错误,这个未经测试的代码应该有效:

UPDATE db SET Video = 'YES' 
WHERE markedAS IN (SELECT GROUP_CONCAT(t.markedASQuoted  SEPARATOR ',') from (select concat(concat('\'', markedAS), '\'') as markedASQuoted from sub-query) t);

我使用concat函数将引号放在那里。