sql 根据多个 table 中的值更新 table 列

sql update table column based on values across multiple tables

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

请求

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 的值,但该值由 selecting 从 request_fields 确定,其中 requests.id=request_fields.requests_idrequest_fields.field_id=1request_fields.response=websites.website_name

所以 IOW,对于 requests 中的每一行,使用 requests.id 到 select request_fields.field_resonserequest_fields 其中 request_fields.request_id=requests.idrequest_fields.field_id=1 然后 select websites.id 来自 websites 其中 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

我有点盯着 table 看,它似乎奏效了,但又一次..我有点头晕了,不确定我是否要搞砸我的东西真实 table.

您需要像这样在 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