Что не так в этом запросе на обновление, который пытался обновить таблицу с помощью concat () fun - PullRequest
0 голосов
/ 07 июня 2019

Я хочу обновить поле, добавляя в него данные, но оно выдает ошибку, пожалуйста, исправьте меня (Query and Table desc ниже)

Я пытался запустить команду UPDATE с функцией CONCAT () в SQL.

update products a
    set a.des = (select concat((select b.des from products b limit 1) ,' one okay') from a)
    where a.p_id = 1;

Я использовал MySQL, Описание таблицы: mysql> desc products;

+---------+-------------+------+-----+--------------+-------+
| Field   | Type        | Null | Key | Default      | Extra |
+---------+-------------+------+-----+--------------+-------+
| p_id    | int(3)      | NO   | PRI | 0            |       |
| p_name  | varchar(10) | YES  |     | NULL         |       |
| p_price | int(10)     | YES  |     | NULL         |       |
| cat_id  | int(3)      | YES  | MUL | NULL         |       |
| des     | varchar(30) | YES  |     | Good         |       |
+---------+-------------+------+-----+--------------+-------+

Ожидаемый результат: mysql> выбрать * из продуктов;

+------+--------+---------+--------+---------------+
| p_id | p_name | p_price | cat_id | des           |
+------+--------+---------+--------+---------------+
|    1 | Mouse  |     150 |      3 | Good one okay |
|    2 | LAN    |      50 |      4 | Good          |
+------+--------+---------+--------+---------------+
2 rows in set (0.00 sec)

Вывод получен:

Error -
update products a set a.des = 
  (select concat((select b.des from products b limit 1) ,' one okay') 
   from a) where a.p_id = 1   Error Code: 1146. Table 'test.a' doesn't exist  0.437 sec

1 Ответ

0 голосов
/ 07 июня 2019

MySQL не позволяет вам ссылаться на обновляемую таблицу в остальной части оператора update, как общее правило.

Обычный обходной путь заключается в том, чтобы сформулировать это как JOIN:

update products p cross join
       (select * from products limit 1) arbitrary
    set p.des = concat(arbitrary.des, ' one okay')
    where p.p_id = 1;

Обратите внимание на использование псевдонима arbitrary. Вы используете limit без order by, поэтому вы получаете произвольное описание.

Если вы просто хотите добавить строку к существующему описанию, вам нужно более простое:

update products p
    set p.des = concat(p.des, ' one okay')
    where p.p_id = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...