如何更新Mysql中的选定行

时间:2015-08-12 11:17:10

标签: mysql sql

我有如下的更新查询。

update logs join user
set logs.userid=user.userid
where logs.log_detail LIKE concat("%",user.userID,"%") and user.userID != "";

我想要做的是加入没有null logs.logId数据的日志表记录。

logs.logId is not null

当我使用" on"我认为mysql首先将所有数据连接到表,然后检查logs.logId是否为空。我真正想做的是第一次消除日志记录,其中logId 然后与用户表连接并执行剩余的语句。

update logs join user
on logs.logId is not null
set logs.userid=user.userid
where logs.log_detail LIKE concat("%",user.userID,"%") and user.userID != "";

编辑:我需要一个如下所示的查询,但mysql不允许此查询。

update (select * from logs where logs.logId is not null) as log join user
set log.userid=user.userid
where log.log_detail LIKE concat("%",user.userID,"%") and user.userID != "";

3 个答案:

答案 0 :(得分:0)

您可以将JOIN ON条件移至update logs join user on logs.log_detail LIKE concat("%",user.userID,"%") and logs.logId is not null set logs.userid = user.userid where user.userID != ""; 条件,但无论哪种方式,我都应该达到相同的目标。

{{1}}

答案 1 :(得分:0)

我想你只想要where子句中的条件:

update logs l join
       user u
       on l.log_detail LIKE concat('%', u.userID, '%')
set l.userid = u.userid
where l.userid is null and user.userID <> '';

这会在执行更新之前检查logs.userid 是否为NULL,这似乎是最可能的逻辑。

答案 2 :(得分:0)

使用CTE应该有帮助 下面的一些代码可能会起作用:

;with CTE as
(
select logs.* from logs where logs.logId is not null
)
update CTE join user
set CTE.userid=user.userid
where logs.log_detail LIKE concat("%",user.userID,"%") and user.userID != "";