繁体   English   中英

MySQL GROUP_CONCAT()中的多个更新

[英]Multiple Updates in MySQL 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)

但事情是,它并没有开始与'报价和与不结束'的报价。 那就是为什么它不更新。

众所周知,像这样的一个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','DaveBob','John','Rob','Tom','DaveBob','John','Rob','Tom','Dave ))

谢谢!

您可以做到这一点:

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));

如果没有错字,则此未经测试的代码应该可以工作:

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函数将引号放在那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM