Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql-在两个表之间使用like更新_Mysql_Sql_Sql Update_Inner Join - Fatal编程技术网

MySql-在两个表之间使用like更新

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 ------ ----------

我有两张桌子。。。说块和过程

过程:

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 我不知道我哪里出错了。。。有人能帮我吗?? 提前感谢

试试这个:

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 | +------+-----------------------------------+------+