【问题标题】:sql update table column based on values across multiple tablessql根据跨多个表的值更新表列
【发布时间】:2021-10-28 05:44:21
【问题描述】:

我有 3 个表(仅显示带有示例值的相关列):

请求

id website_id
=============
1  NULL
2  NULL
3  NULL

request_fields

id requests_id field_id field_response
=============================================

1  1                  1        some site
2  1                  2        some user
3  2                  1        some other site
4  2                  2        some other user
5  3                  1        some site
6  3                  2        rando user

网站

id website_name
===============
1  some site
2  some other site

我的目标是将requests.website_id 更新为来自websites.id 的值,但该值是通过从request_fields 中选择来确定的,其中requests.id=request_fields.requests_id 和 request_fields.field_id=1 和 request_fields.response=websites.website_name

因此,IOW,对于requests 中的每一行,使用requests.id 从request_fields 中选择request_fields.field_resonse,其中request_fields.request_id=requests.id 和request_fields.field_id=1,然后从websites 中选择websites.id,其中websites.name=[the request_fields.field_resonse value] 和然后将原始 requests.id 值设置为 websites.id 值。

所以最终结果是

请求

id website_id
=============
1  1
2  2
3  1

这可能吗?我一直在努力解决它,我认为它涉及内部连接和其他东西,但这对我来说有点多。

编辑:

这是我目前的尝试,但我不确定我做对了吗?

update requests
inner join request_fields on requests.id=request_fields.request_id
inner join websites on request_fields.response=website.name
set requests.website_id=websites.id

我有点盯着桌子,它似乎已经奏效了,但又一次.. 我有点过头了,不确定我是否要在我的真实桌子上搞砸一些东西。

【问题讨论】:

    标签: mysql join sql-update


    【解决方案1】:

    您需要像这样在UPDATE 语句中加入所有 3 个表:

    UPDATE requests r
    INNER JOIN request_fields rf ON rf.requests_id = r.id
    INNER JOIN websites w ON w.website_name = rf.field_response
    SET r.website_id = w.id
    WHERE rf.field_id = 1;
    

    请参阅demo。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 2021-01-28
      • 1970-01-01
      • 2015-06-04
      • 2013-08-16
      • 1970-01-01
      相关资源
      最近更新 更多