使用自己的每个字段的计算子字符串更新特定表的所有行

时间:2016-10-14 11:30:00

标签: mysql substring

经过一番搜索后,我发现了一些我用过的答案,试图解决我的问题,但到目前为止还没有成功。

我有一个名为company_details的列表。每个字段都有不同的字符串内容,但它们都在某处有两个字之间的部分。我想找到文本的这一部分,并用通讯员发现的文本更新通讯字段。

在论坛的其他答案中,我设法让专栏之间的文字在"这个"和#34;那"就像我建立的例子一样:

SELECT SUBSTRING(
sentence,
LOCATE('this', sentence),
LOCATE('that', sentence) - LOCATE('this', sentence))
FROM (SELECT "Hello this is a test, will finish that. For some reason..." AS sentence) test;

结果(选择"你好这是一个测试,将完成。由于某种原因......")是:'这是一个测试,将完成'

到目前为止一切顺利,现在我想查看所有表并获取字段值,选择子字符串并将字段更新为新值。

所以我试图使用此查询:

UPDATE compdata
SET company_details=(SELECT SUBSTRING(
    sentence,
    LOCATE('this', sentence),
    LOCATE('that', sentence) - LOCATE('this', sentence))
FROM (SELECT company_details AS sentence from compdata) teste);

我收到错误:

  

"错误代码:1242。子查询返回超过1行",

女巫我可以理解为什么,在Select Substring上有多个结果。 (我可以发誓昨天这个查询运行并且工作正常)。 我现在可以使用LOOP或其他东西,但我被卡住了,任何解决方案都会受到赞赏,因为应该像一年一样运行性能不是一个大问题,桌子上只有59K行

1 个答案:

答案 0 :(得分:2)

您可以使用不带子选择的简单更新

  UPDATE compdata
  SET company_details=  SUBSTRING(
      company_details,
      LOCATE('this', company_details),
      LOCATE('that', company_details) - LOCATE('this', company_details))