我正在寻找创建一个新列,其值与mysql中现有列中的关键字相对应。
我正在尝试根据企业名称中的关键字来确定某项实践是私有还是公开。
简单地说,我想要获得的是一个名为“练习”的新专栏,如果关键词是专家,则会将值插入私有状态。
感谢您对此事的任何帮助。
答案 0 :(得分:0)
如果我理解你在问什么,你想要在现有表中添加一列,然后根据同一行中另一列的值设置该列的值(对于每一行)?
首先,要创建名为Practice
的列,您可以使用MySQL的ALTER TABLE
命令:
ALTER TABLE YourTable ADD Practice VARCHAR(20);
我不确定你的目标是什么类型,所以我只是选择VARCHAR(20)
;根据您正在使用的值(甚至是查找表的外键),您也可以从enum
中受益。
创建列后,您可以设置其值:
UPDATE YourTable
SET Practice = CASE
WHEN SomeColumn = 'specialist' THEN
'private'
WHEN SomeColumn = 'gleneagles' THEN
'private'
ELSE
'public'
END
如果您不希望设置不匹配的记录,只需删除ELSE 'public'
,它们将默认为null
。
更新(使用通配符选择)
如果您需要更新包含较大文本的相关数据且需要通配符的行,则可以使用MySQL的LIKE
运算符:
UPDATE YourTable
SET Practice = CASE
WHEN SomeColumn LIKE '%specialist%' THEN
'private'
WHEN SomeColumn LIKE '%gleneagles%' THEN
'private'
ELSE
'public'
END
或者,如果您只是根据包含多个值的文本更新为单个值,则可以使用正则表达式(通过REXEXP
)代替:
UPDATE YourTable
SET Practice = CASE
WHEN SomeColumn REGEXP 'specialist|gleneagles' THEN
'private'
ELSE
'public'
END
答案 1 :(得分:0)
您询问的是非规范化,这意味着存储派生的数据。我最初的反应是不添加另一列,除非出现严重的性能问题,而是我会创建一个视图,使计算出来的值。
但是,如果您需要该列,我将创建一个布尔列:
alter table mytable
add is_private boolean;
然后像这样填充:
update mytable
set is_private = (name like '%specialist%' or
name like '%gleneagles%')