根据MySql 5中表'B'的内容,将0..n记录到表'A'中

时间:2010-06-02 17:12:59

标签: sql mysql

使用MySql 5,我有一个任务,我需要根据另一个表的内容更新一个表。

例如,如果表'B'包含'B1',我需要将'A1'添加到表'A'。如果表'B'包含'B2'等,我需要将'A2a'和'A2b'添加到表'A'。在我们的例子中,我们感兴趣的表'B'中的值是枚举。

现在我有一个包含一系列语句的存储过程,如:

INSERT INTO A
SELECT 'A1'
FROM B
WHERE B.Value = 'B1';
--Repeat for 'B2' -> 'A2a'; 'B2' -> 'A2b'; 'B3' -> 'A3', etc...

还有更好的DRY方式来实现这个目标吗?

修改 表'B'中可能有值没有表'A'的等价值。

修改 实施例

鉴于表B

+-------+
| Value |
+-------+
| B1    |
| B1    |
| B2    |
| B3    |
| FOO   |
+-------+

期待表A

+-------+
| Value |
+-------+
| A1    |
| A2a   |
| A2b   |
| A3    |
+-------+

2 个答案:

答案 0 :(得分:2)

使用CASE statement

INSERT INTO TABLE_A
SELECT CASE 
         WHEN b.value = 'B1' THEN 'A1'
         WHEN b.value = 'B2' THEN 'A2a'
       END
  FROM TABLE_B b

如果表'B'包含'B2'

,我需要将'A2a'和'A2b'添加到表'A'

抱歉,可以返回一个值。 switch语句允许通过案例,但不会返回多个值。

答案 1 :(得分:2)

您可以考虑创建一个包含所需测试/结果组合的表,例如:

TABLE Tests

Test  |  Result
----------------
B1    |  A1
B2    |  A2a
B2    |  A2b
B3    |  A3

然后,您可以将此表内连接到TABLE_B并读出结果Result列以确定要插入TABLE_A的值:

INSERT INTO TABLE_A
SELECT DISTINCT TABLE_B.Result
FROM TESTS, TABLE_B
WHERE TABLE_B.Value = TESTS.Test