我有如下的更新查询。
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 != "";
答案 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 != "";