MYSQL 根据 3 列的值插入
MYSQL INSERT based on values from 3 columns
我有一个 mysql 数据库,我想根据三个不同数字字段的条件做一个 SELECT/INSERT:(HI、OT 和 WC)。
我想将以下条件的值插入到名为 AT 的字段中:
HI if HI > OT
else
WC if WC < OT
else
OT
类似这样,但我似乎无法正确理解:
INSERT INTO variations (AT)
SELECT
HI if HI > OT
else
WC if WC < OT
else
OT,
FROM archive;
试试这个:
mysql> INSERT INTO variations (AT)
->SELECT CASE WHEN HI > OT THEN HI
->WHEN WC < OT THEN WC ELSE OT END FROM archive;
将单列行插入到 table 中似乎有点奇怪。这不是无效,但有点奇怪。
首先,编写SELECT语句。请注意 IF
不是 MySQL 中的有效关键字。最接近的 ANSI 标准等效项是 CASE
表达式。 MySQL 还方便地提供了一个非标准的 IF()
函数。
SELECT CASE
WHEN t.hi > t.ot THEN t.hi
WHEN t.wc < t.ot THEN t.wc
ELSE t.ot
END AS `at`
FROM archive t
要对此进行测试,您可能希望在 SELECT 列表中包含一些其他列,以便验证结果 and/or 在 WHERE 子句中包含一些谓词。
SELECT CASE
WHEN t.hi > t.ot THEN t.hi
WHEN t.wc < t.ot THEN t.wc
ELSE t.ot
END AS `at`
, t.hi
, t.wc
, t.ot
FROM archive t
那只是为了测试。一旦你有一个 SELECT 是 returning 你想要插入的行,然后就在 SELECT
之前添加
INSERT INTO variations (`at`)
你会很高兴的。
注意:不是 必须将列名称 "at" 括在反引号中,因为它不是 MySQL 保留字。但我倾向于在所有 MySQL 关键字的标识符(例如列名)周围加上反引号(即使它们不是保留字。)
MySQL 确实有 CASE
表达式的替代方法。使用嵌套 MySQL IF()
函数的表达式可以获得等效结果。例如:
SELECT IF(t.hi>t.ot,t.hi,IF(t.wc<t.ot,t.wc,t.ot)) AS `at`
FROM archive t
注意:表达式 IF(x,y,z)
导致 MySQL 将 x
计算为布尔值,如果 x
计算为 TRUE,则 return y
否则 return z
.
我有一个 mysql 数据库,我想根据三个不同数字字段的条件做一个 SELECT/INSERT:(HI、OT 和 WC)。
我想将以下条件的值插入到名为 AT 的字段中:
HI if HI > OT
else
WC if WC < OT
else
OT
类似这样,但我似乎无法正确理解:
INSERT INTO variations (AT)
SELECT
HI if HI > OT
else
WC if WC < OT
else
OT,
FROM archive;
试试这个:
mysql> INSERT INTO variations (AT)
->SELECT CASE WHEN HI > OT THEN HI
->WHEN WC < OT THEN WC ELSE OT END FROM archive;
将单列行插入到 table 中似乎有点奇怪。这不是无效,但有点奇怪。
首先,编写SELECT语句。请注意 IF
不是 MySQL 中的有效关键字。最接近的 ANSI 标准等效项是 CASE
表达式。 MySQL 还方便地提供了一个非标准的 IF()
函数。
SELECT CASE
WHEN t.hi > t.ot THEN t.hi
WHEN t.wc < t.ot THEN t.wc
ELSE t.ot
END AS `at`
FROM archive t
要对此进行测试,您可能希望在 SELECT 列表中包含一些其他列,以便验证结果 and/or 在 WHERE 子句中包含一些谓词。
SELECT CASE
WHEN t.hi > t.ot THEN t.hi
WHEN t.wc < t.ot THEN t.wc
ELSE t.ot
END AS `at`
, t.hi
, t.wc
, t.ot
FROM archive t
那只是为了测试。一旦你有一个 SELECT 是 returning 你想要插入的行,然后就在 SELECT
之前添加
INSERT INTO variations (`at`)
你会很高兴的。
注意:不是 必须将列名称 "at" 括在反引号中,因为它不是 MySQL 保留字。但我倾向于在所有 MySQL 关键字的标识符(例如列名)周围加上反引号(即使它们不是保留字。)
MySQL 确实有 CASE
表达式的替代方法。使用嵌套 MySQL IF()
函数的表达式可以获得等效结果。例如:
SELECT IF(t.hi>t.ot,t.hi,IF(t.wc<t.ot,t.wc,t.ot)) AS `at`
FROM archive t
注意:表达式 IF(x,y,z)
导致 MySQL 将 x
计算为布尔值,如果 x
计算为 TRUE,则 return y
否则 return z
.