【问题标题】:problem creating new column in mySQL / phpmyadmin在 mySQL / phpmyadmin 中创建新列的问题
【发布时间】:2019-08-23 13:54:40
【问题描述】:

我在 phpMyAdmin(在服务器中)中有一个 mySQL 表,但在创建和保存新列时遇到问题。

表名是'visage',它存在并且已经有以下变量:

ind1    int(15)
lien1   varchar(2083)
dire    text
ind2    ind(15)
lien2   varchar(2083)
delta   int(15)

我想添加一个名为“inddir”的新列,其中值将取决于“ind1”和“dire”列中的值,方法是使用 SELECT/CASE/WHEN:


SELECT *,

CASE

  WHEN `dire` = 'der' THEN ((ind1*10)+0)

  WHEN `dire` = 'izq' THEN ((ind1*10)+1)

  WHEN `dire` = 'del' THEN ((ind1*10)+2)

  WHEN `dire` = 'atr' THEN ((ind1*10)+3)

  WHEN `dire` = 'arr' THEN ((ind1*10)+4)

  WHEN `dire` = 'abj' THEN ((ind1*10)+5)

END AS `inddir`

FROM `visage`

此请求无效:

--> 在 phpMyAdmin 中:https://ibb.co/54GpX4N

我直接在代码中获取错误:“Unrecognized keyword.(near AS)”和“Unexpected token.(near inddir)https://ibb.co/1ZZ4rc1

但是,当我不使用“AS indir”时,mySQL 会按照我想要的方式创建一个新列,但名称是完整的查询 --> 我无法保存此列。

--> 在 phpMyAdmin 中:https://ibb.co/PY82Kwq

有人可以告诉我如何按预期创建inddir 列,然后能够将这个新列保存在 mySQL 表中吗?

非常感谢。

【问题讨论】:

标签: mysql phpmyadmin


【解决方案1】:

我使用 heidiSQL,它适用于我。您可以尝试以下两个版本,带或不带“AS”关键字吗?

SELECT *,
case
    when `currency` = 'USD' then 7
    when `currency` = 'EUR' then 8
    when `currency` = 'JPY' then 9
END as `newcolum`
FROM accounts;

SELECT *,
case
    when `currency` = 'USD' then 7
    when `currency` = 'EUR' then 8
    when `currency` = 'JPY' then 9
END 
FROM accounts;

【讨论】:

  • 谢谢 Aris,但您的第一个选项在我的情况下不起作用(请参阅 --> ibb.co/54GpX4N 和错误 ibb.co/1ZZ4rc1),您的第二个选项有效,但它会生成一个列其中名称是整个请求,我无法将其保存到数据库中...
  • 似乎 heidiSQL 的行为与 phpMyAdmin 不同,因为对我来说它按预期选择。
猜你喜欢
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 2015-01-18
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多