вычисляемый столбец, используя значение из другой таблицы - PullRequest
0 голосов
/ 29 января 2019
create table kit(id int unsigned not null auto_increment, creator int unsigned not null, name varchar(16) not null, script longtext not null, tag as concat(select username from user where id = creator, '/', name), primary key (id));

не работает, потому что я пытаюсь сделать tag вычисляемым столбцом

Я хочу две таблицы, user выглядит как

+----+------------------+
| id | username         |
+----+------------------+
|  1 | 1234567890123456 |
+----+------------------+

и kit выглядит как

+----+---------+--------+--------+-------------------------+
| id | creator |  name  | script |           tag           |
+----+---------+--------+--------+-------------------------+
|  1 |       1 | kitkit | long   | 1234567890123456/kitkit |
+----+---------+--------+--------+-------------------------+

Столбец тега должен быть автоматически вычислен из имени пользователя создателя и имени набора.

Я думал, что мое объявление столбца будет работать:

tag as concat(select username from user where id = creator, '/', name)

но, наверное, нет.

1 Ответ

0 голосов
/ 29 января 2019

Примерно так (NB! Не тестировалось)

create table kit(
id int unsigned not null auto_increment, 
creator int unsigned not null, 
name varchar(16) not null, 
script longtext not null, 
tag varchar(33) not null, primary key (id));

DELIMITER //
CREATE TRIGGER contacts_before_insert
BEFORE INSERT
   ON contacts FOR EACH ROW
BEGIN
   DECLARE vtag varchar(33);
   -- Fill tag value
   select concat(username,'/',OLD.name) from user where id = OLD.creator INTO vtag;

   -- Update created_by field to the username of the person performing the INSERT
   SET NEW.tag = vtag;

END; //

DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...