将0..n条记录插入表';A';基于表'的内容;B';在MySql 5中

将0..n条记录插入表';A';基于表'的内容;B';在MySql 5中,sql,mysql,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' ->

使用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...
有没有一种更好、更干燥的方法来实现这一点

编辑: 表“B”中的值可能与表“A”中的值没有等效值

编辑: 范例

给定表B

+-------+
| Value |
+-------+
| B1    |
| B1    |
| B2    |
| B3    |
| FOO   |
+-------+
期望表A

+-------+
| Value |
+-------+
| A1    |
| A2a   |
| A2b   |
| A3    |
+-------+
使用:

如果表“B”包含“B2”,我需要将“A2a”和“A2b”添加到表“A”

很抱歉,只能返回一个值。一个开关语句允许通过案例而失败,但也不会返回一个以上的值。

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

TABLE Tests

Test  |  Result
----------------
B1    |  A1
B2    |  A2a
B2    |  A2b
B3    |  A3
然后,您可以将该表内部联接到表_B,并读取结果列以确定要插入表_A的值:

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

@小马,这很酷,我不知道案例陈述,但是,正如你所说的,它并不能完全解决问题+1.如果没有等价物,您对表A做了什么?您会事先知道这些情况吗?如果表
B
有五条
Value=“B2”
记录,您会在
A
中插入两条记录(每个不同的映射一条)还是十条记录(映射乘以源行数)?到目前为止,答案似乎是后一种情况,但不清楚这正是您所要求的。@pilcrow,我可能不想对表B中的某些值执行任何操作。因此,以您的示例为例,如果表B有五条记录的Value=“B2”(并且没有“B1”或“B3”),则只应将“A2a”和“A2b”添加到A中。哑巴,是的,但情况就是这样。可能没有优雅的方法,但如果有,我很想知道。@Robert,是的,但您将在表中插入多少条
A2a
A2b
记录
A
?:)请向我们展示一个单列表
B
(输入)和预期的单列表
a
(所需输出)的示例。@pilcrow,很抱歉混淆,如果“B1”在表B中出现两次,我只需要“A1”一次。在我的具体案例中,我知道“B1”只能在表B中出现一次,但解决通用案例可能对所有人都更有用。添加了示例表。OP可能(也可能不)希望它是
INSERT。。。选择DISTINCT…
。。我在上面的评论中要求澄清。是的,distinct是我想要的。看看你的回答,我发现我试图将数据编码到我的SQL命令中,而不是像你在回答中那样将其表示为数据。谢谢
INSERT INTO TABLE_A
SELECT DISTINCT TABLE_B.Result
FROM TESTS, TABLE_B
WHERE TABLE_B.Value = TESTS.Test