在MySQL中,如果是……END子句,我可以将两个(或更多)条件放在一个条件中吗?

在MySQL中,如果是……END子句,我可以将两个(或更多)条件放在一个条件中吗?,mysql,triggers,case,Mysql,Triggers,Case,就这样, SET v_tax_rate = CASE state WHEN 'AL', 'AK' THEN 0.04 WHEN 'CA' THEN 0.06 WHEN 'WY' THEN 0.03 END; 我把“AL”和“AK”放在一起。但它不起作用。收到错误提示后,我无法成功创建它 是否可以在MySQL中执行此操作?根据当前语法、对警告的理解和正确处理,一个选项是执行以下操作: mysql> DROP TABLE IF

就这样,

SET v_tax_rate =
    CASE state
        WHEN 'AL', 'AK' THEN 0.04
        WHEN 'CA' THEN 0.06
        WHEN 'WY' THEN 0.03
    END;
我把“AL”和“AK”放在一起。但它不起作用。收到错误提示后,我无法成功创建它

是否可以在MySQL中执行此操作?

根据当前语法、对警告的理解和正确处理,一个选项是执行以下操作:

mysql> DROP TABLE IF EXISTS `tbl_sta`;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE IF NOT EXISTS `tbl_sta` (
    ->   `state` CHAR(2) NOT NULL 
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO `tbl_sta`
    ->   (`state`)
    -> VALUES
    ->   ('AL'), ('AK'),
    ->   ('CA'), ('WY');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> SELECT
    ->   `state`,
    ->   CASE `state`
    ->     WHEN `state` NOT IN ('AL', 'AK') THEN 0.04
    ->     WHEN 'CA' THEN 0.06
    ->     WHEN 'WY' THEN 0.03
    ->   END `result`
    -> FROM `tbl_sta`;
+-------+--------+
| state | result |
+-------+--------+
| AL    |   0.04 |
| AK    |   0.04 |
| CA    |   0.06 |
| WY    |   0.03 |
+-------+--------+
4 rows in set, 4 warnings (0.01 sec)

mysql> SHOW WARNINGS;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'AL' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'AK' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'CA' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'WY' |
+---------+------+----------------------------------------+
4 rows in set (0.00 sec)

mysql> SELECT 'AL' = 0 /* FALSE */, 'AL' = 1 /* TRUE */;
+----------+----------+
| 'AL' = 0 | 'AL' = 1 |
+----------+----------+
|        1 |        0 |
+----------+----------+
1 row in set, 2 warnings (0.00 sec)

mysql> SHOW WARNINGS;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'AL' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'AL' |
+---------+------+----------------------------------------+
2 rows in set (0.00 sec)
另一个选项更详细,但没有警告:

mysql> SELECT
    ->   `state`,
    ->   CASE `state`
    ->     WHEN IF(`state` IN ('AL', 'AK'), `state`, NULL) THEN 0.04
    ->     WHEN 'CA' THEN 0.06
    ->     WHEN 'WY' THEN 0.03
    ->   END `result`
    -> FROM `tbl_sta`;
+-------+--------+
| state | result |
+-------+--------+
| AL    |   0.04 |
| AK    |   0.04 |
| CA    |   0.06 |
| WY    |   0.03 |
+-------+--------+
4 rows in set (0.00 sec)
还有另一个选择:

mysql> SELECT
    ->   `state`,
    ->   CASE `state`
    ->     WHEN CASE WHEN `state` IN ('AL', 'AK')
    ->          THEN `state` END THEN 0.04
    ->     WHEN 'CA' THEN 0.06
    ->     WHEN 'WY' THEN 0.03
    ->   END `result`
    -> FROM `tbl_sta`;
+-------+--------+
| state | result |
+-------+--------+
| AL    |   0.04 |
| AK    |   0.04 |
| CA    |   0.06 |
| WY    |   0.03 |
+-------+--------+
4 rows in set (0.00 sec)

请参阅。

当'AL'和'AK'达到0.04时,您是否尝试过?我没有MySQL,但它可以在Postgres中使用。谢谢!我试过你的建议,但没有用。用相同的或相同的结果替换和。哦,是的,当然你想要或那里。当state='AL'或state='AK'为0.04时,如果执行CASE怎么办。这就是我在博士后的表现,这是可行的。但我觉得有点冗长。我想知道是否存在更简单的语法。非常感谢。这是可行的。谢谢你如此仔细细致的回复!你真是太好了。非常感谢。