Mysql 使用关键字创建新列

Mysql 使用关键字创建新列,mysql,Mysql,我希望创建一个新列,其值与mysql中现有列中的关键字对应 我试图根据机构名称中的关键字来确定一个机构是私人的还是公共的 用通俗易懂的英语,我想得到的是一个新的专栏,叫做Practice and insert value private,如果关键词是specialist,gleneagles 如果您能在这方面提供帮助,我将不胜感激。如果我理解您的要求,您想在现有表中添加一列,然后根据同一行中另一列的值设置该列的值(每行) 首先,要创建名为Practice的列,可以使用MySQL的命令: 我不确定

我希望创建一个新列,其值与mysql中现有列中的关键字对应

我试图根据机构名称中的关键字来确定一个机构是私人的还是公共的

用通俗易懂的英语,我想得到的是一个新的专栏,叫做Practice and insert value private,如果关键词是specialist,gleneagles


如果您能在这方面提供帮助,我将不胜感激。

如果我理解您的要求,您想在现有表中添加一列,然后根据同一行中另一列的值设置该列的值(每行)

首先,要创建名为
Practice
的列,可以使用MySQL的命令:

我不确定你的目标是什么类型,所以我只选择
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
或者,如果只根据包含多个值的文本更新为单个值,则可以使用正则表达式(通过
rexep
):


您询问的是非规范化,这意味着存储派生数据。我最初的反应是不添加另一列,除非存在严重的性能问题,相反,我会创建一个gas值大于计算值的视图

但是,如果需要该列,我将创建一个布尔列:

alter table mytable 
add is_private boolean;
然后像这样填充它:

update mytable 
set is_private = (name like '%specialist%' or 
                  name like '%gleneagles%')

您好,谢谢您,我正在使用您给我的命令行,但它仍然返回0行受影响。关键词是较大短语的一部分,例如,格伦伊格尔斯是格伦伊格尔斯医院的一部分。所以我加入了%通配符的使用,但是仍然没有任何结果。有什么办法吗?@user3377434我已经更新了答案,包括基于通配符的更新=]
alter table mytable 
add is_private boolean;
update mytable 
set is_private = (name like '%specialist%' or 
                  name like '%gleneagles%')