MySql-在两个表之间使用like更新
我有两张桌子。。。说块和过程 过程: P_ID P_NAME ---- ------ 1 x1p1 2 x1p4 3 x1p8 4 x2p1 5 x3p4 6 x3py 对于所有记录,表更新为Blocks.p_ID为1。 我得到的表格如下: B_ID BLOCK_NAME P_ID ------ ------------------------------- ------ 1 x1p1ef......ldoddr60maew...... 1 2 x1p4fr......ldoddr60mans...... 1 3 x1p8jg......ldoddr80maew...... 1 4 x1p4gh......ldoddr80mans...... 1 5 x1p8mj......ldoyyyyy20ma...... 1 6 x2p1ad......ldoyyyyy30maisclk.... 1 但我期待着: B_ID BLOCK_NAME P_ID ------ ------------------------------- ------ 1 x1p1ef......ldoddr60maew...... 1 2 x1p4fr......ldoddr60mans...... 2 3 x3p4jg......ldoddr80maew...... 5 4 x1p4gh......ldoddr80mans...... 2 5 x1p8mj......ldoyyyyy20ma...... 3 6 x2p1ad......ldoyyyyy30maisclk.... 4 我不知道我哪里出错了。。。有人能帮我吗?? 提前感谢 试试这个:MySql-在两个表之间使用like更新,mysql,sql,sql-update,inner-join,Mysql,Sql,Sql Update,Inner Join,我有两张桌子。。。说块和过程 过程: P_ID P_NAME ---- ------ 1 x1p1 2 x1p4 3 x1p8 4 x2p1 5 x3p4 6 x3py 对于所有记录,表更新为Blocks.p_ID为1。 我得到的表格如下: B_ID BLOCK_NAME P_ID ------ ----------
UPDATE Blocks B
INNER JOIN PROCESS P ON B.BLOCK_NAME LIKE CONCAT(P.P_NAME + '%')
SET B.P_ID=P.P_ID;
你很接近
您应该使用ANSI join语法,并在ON子句中添加LIKE条件
或隐式逗号连接语法,并将条件放在WHERE子句中
另一种方法
UPDATE blocks b JOIN process p
ON p.p_name = LEFT(b.block_name, CHAR_LENGTH(p.p_name))
SET b.p_id = p.p_id;
结果:
+------+-----------------------------------+------+
| B_ID | BLOCK_NAME | P_ID |
+------+-----------------------------------+------+
| 1 | x1p1ef......ldoddr60maew...... | 1 |
| 2 | x1p4fr......ldoddr60mans...... | 2 |
| 3 | x1p8jg......ldoddr80maew...... | 3 |
| 4 | x1p4gh......ldoddr80mans...... | 2 |
| 5 | x1p8mj......ldoyyyyy20ma...... | 3 |
| 6 | x2p1ad......ldoyyyyy30maisclk.... | 4 |
| 7 | x3p4da......ldoyyyyy30ma...... | 5 |
| 8 | x3p4we......ldozzzzz20ma...... | 5 |
| 9 | x3pxtu......ldozzzzz40ma...... | NULL |
| 10 | x3pxte......ldozzzzz60ma...... | NULL |
+------+-----------------------------------+------+
你的问题是什么?如果您尝试了一些代码,请与我们分享。请发布一些相关的代码和一个关于您想要什么的具体问题。我认为在第一次编辑后,我的问题已经足够清楚了。。为什么暂停?谢谢@peterm查询按预期进行。。。我想我的问题很复杂。。。
UPDATE blocks b JOIN process p
ON b.block_name LIKE CONCAT(p.p_name, '%')
SET b.p_id = p.p_id;
UPDATE blocks b, process p
SET b.p_id = p.p_id
WHERE b.block_name LIKE CONCAT(p.p_name, '%');
UPDATE blocks b JOIN process p
ON p.p_name = LEFT(b.block_name, CHAR_LENGTH(p.p_name))
SET b.p_id = p.p_id;
+------+-----------------------------------+------+
| B_ID | BLOCK_NAME | P_ID |
+------+-----------------------------------+------+
| 1 | x1p1ef......ldoddr60maew...... | 1 |
| 2 | x1p4fr......ldoddr60mans...... | 2 |
| 3 | x1p8jg......ldoddr80maew...... | 3 |
| 4 | x1p4gh......ldoddr80mans...... | 2 |
| 5 | x1p8mj......ldoyyyyy20ma...... | 3 |
| 6 | x2p1ad......ldoyyyyy30maisclk.... | 4 |
| 7 | x3p4da......ldoyyyyy30ma...... | 5 |
| 8 | x3p4we......ldozzzzz20ma...... | 5 |
| 9 | x3pxtu......ldozzzzz40ma...... | NULL |
| 10 | x3pxte......ldozzzzz60ma...... | NULL |
+------+-----------------------------------+------+