Mysql 更新一个表';s列,基于另一个表';s列,其中有匹配的ID
好的,我现在有两个表,它们有相应的ID(这是我们如何知道哪个列表属于哪个用户,它们有相同的ID)。基本上,我想根据另一个表(pmd_列表)的网站URL(列“www”)更新一个表(pmd_用户)的所有用户名(列“login”),并根据ID进行匹配。除此之外,删除了http:// 因此,表pmd_users具有字段“id”,而pmd_listings具有“user_id”。我们只需要更新表“pmd_users”中的“login”列。我曾想过像下面这样做,但我不确定这是否正确,我也不知道如何从网站(www)栏中删除“http://”和“https://” 有什么建议吗Mysql 更新一个表';s列,基于另一个表';s列,其中有匹配的ID,mysql,sql,database,join,Mysql,Sql,Database,Join,好的,我现在有两个表,它们有相应的ID(这是我们如何知道哪个列表属于哪个用户,它们有相同的ID)。基本上,我想根据另一个表(pmd_列表)的网站URL(列“www”)更新一个表(pmd_用户)的所有用户名(列“login”),并根据ID进行匹配。除此之外,删除了http:// 因此,表pmd_users具有字段“id”,而pmd_listings具有“user_id”。我们只需要更新表“pmd_users”中的“login”列。我曾想过像下面这样做,但我不确定这是否正确,我也不知道如何从网站(w
TL;DR我希望表pmd_用户列“login”与表pmd_列表列“www”匹配,其ID列匹配,但没有http://。我认为您可以使用
substr()
和case
来实现这一点
UPDATE pmd_users INNER JOIN pmd_listings
ON pmd_listings.user_id=pmd_users.id
SET pmd_users.login = CASE
WHEN substr(pmd_listings.www, 1,7) = 'http://'
THEN substr(pmd_listings.www, 8)
WHEN substr(pmd_listings.www, 1,8) = 'https://'
THEN substr(pmd_listings.www, 9)
ELSE pmd_users.login
END;
当然,这不是一个完整的问题,除非有人能帮助我,否则我可以使用以下两个查询来实现我想要的结果:
UPDATE pmd_users
INNER JOIN pmd_listings
ON pmd_listings.user_id = pmd_users.id AND pmd_listings.www != ""
SET pmd_users.login = pmd_listings.www
*添加了添加项以删除空列,完成后使用:
UPDATE pmd_users
SET login = REPLACE(login, 'http://www', '')
WHERE login LIKE 'http://www.%'
从登录中删除额外的
够了!谢谢大家。您可能想看看
REPLACE()
函数。可能是重复的哦,我没有想到。但是,我必须复制数据,然后运行单独的查询来删除不需要的位,而不是同时执行?因为我不想从origianl列中删除http,只想在新表中的副本上删除。但是这可以工作。不,您可以只设置pmd.user.login=REPLACE(…)
。源列将不受影响。愿意尝试一下(使用备份),但发现此错误“MySQL说:文档#1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第9行“CASE”附近使用的正确语法”当我使用END
而不是END CASE
时,语法起作用。编辑我的答案。谢谢!如果您有时间,可以解释一下“1,7”“8”“1,8”“9”是什么意思吗?我不太确定。只要你有时间和关心,否则非常感谢!字符串后面的2个值表示字符串的起始索引号和结束索引号。如果要将所有内容返回到第一个索引的右侧,则结束索引号是可选的。UPDATE pmd_users internal JOIN pmd_listings ON pmd_listings.user_id=pmd_users.id和pmd_listings.www''SET pmd_users.login=REPLACE(pmd_listings.www,'http://',''代码>
UPDATE pmd_users
SET login = REPLACE(login, 'http://www', '')
WHERE login LIKE 'http://www.%'