有三个表,表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中执行此操作?
答案 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