【问题标题】:MySQL - (#1242) Sub-query returns more than 1 rowMySQL - (#1242) 子查询返回多于 1 行
【发布时间】:2019-07-03 09:20:02
【问题描述】:

我有 tbl,其中包括 2 列:标题和参数,值如下:

  • 标题: {“教学”}

  • 参数:

{ "ufield926":"34", "ufield927":"苏德", "ufield928":"阿拉", "ufield929":"麦加", “ufield930”:“1983 年 1 月 1 日”, "ufield933":"011", "ufield934":"Mub", "ufield943":"SU/HI/14", "ufield944":"平均", "ufield946":"女" } 我想在“ufield943”之后提取代码:仅是 SU/HI/14 并将其与标题列中的值连接起来,如下所示:

--> 教学 (SU/HI/14)

这是我尝试过的查询:

SELECT CONCAT(title, "(", (select 
       substring(
         params,
         locate('ufield943', params) + 12,
         locate('ufield944', params) - locate('ufield943', params) - 21
       ) FROM tbl), ")") AS title
FROM tbl;

每次运行查询时都会出现以下错误

"#1242 - 子查询返回多于 1 行"

【问题讨论】:

    标签: mysql


    【解决方案1】:

    我将{"..."} 从标题中删除,同时使用SUBSTRINGCHAR_LENGTH 函数。

    我将- 21 更改为- 16 并在( 之前添加空格

    SELECT CONCAT(substring(title, 3,CHAR_LENGTH(title) - 4 ), " (", 
       substring(
         params,
         locate('ufield943', params) + 12,
         locate('ufield944', params) - locate('ufield943', params) - 16
       ), ")") AS Title
    FROM tbl;
    

    DEMO

    【讨论】:

    • 它正在处理单行,但是当尝试从“phpmyadmin”运行查询以将更改应用于所有行时,会弹出提到的错误
    • 如果标题和参数字段在同一个表中,绝对没有理由使用子查询
    • @AbbasSoliman 将空间更改为 "("" ("。对于纯 SQL 中不可能的更改标题。您可能必须查询出数据,然后在执行查询的任何应用程序中对其进行处理。
    • @AbbasSoliman 你可以试试UPDATE tbl SET title = CONCAT(...)。对于更精确的问题,我想知道表格的结构,你拥有的一些数据和你想要的一些数据。尝试自己做一些事情,如果做不到,你可以打开一个新问题
    • @AbbasSoliman 我试试这个并且工作正常demo。使用 `\` 时要小心,因为是 mysql 特殊字符。如果你能帮忙read here
    猜你喜欢
    • 2012-09-17
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    相关资源
    最近更新 更多