将同一列从3行转换为另一个表中的3列

时间:2011-09-25 18:13:57

标签: mysql sql

有三个表,表a,表b和表c。表b组合了来自其他两个表的id,以定义a和c之间的1到1(1到3)关系。所以任何一个都有0到3个c。

执行连接和多次选择以根据这些关系对对象进行验证成本太高。我试图完全摆脱表b,并按表c中的c.id顺序定义关系。

我应该运行什么更新查询?我试过这个:

UPDATE a SET c_a = (SELECT c_id from b WHERE a_id = a.id LIMIT 0,1 ORDER BY c_id asc);
UPDATE a SET c_b = (SELECT c_id from b WHERE a_id = a.id LIMIT 1,1 ORDER BY c_id asc);
UPDATE a SET c_c = (SELECT c_id from b WHERE a_id = a.id LIMIT 2,1 ORDER BY c_id asc);

但失败了,因为你不能在MySQL的子查询中使用LIMIT。

如何在SQL中执行此操作?

1 个答案:

答案 0 :(得分:0)

如果您不介意订单,这应该有效:

UPDATE a a, b b
   SET a.c_a = b.c_id
 WHERE a.id = b.a_id

UPDATE a a, b b
   SET a.c_b = b.c_id
 WHERE a.id = b.a_id
   and a.c_a <> b.c_id

UPDATE a a, b b
   SET a.c_c = b.c_id
 WHERE a.id = b.a_id
   and a.c_a <> b.c_id
   and a.c_b <> b.c_id