通过查找另外两个表来更新用户 ID

Posted

技术标签:

【中文标题】通过查找另外两个表来更新用户 ID【英文标题】:Update user id by looking up two other tables 【发布时间】:2022-01-09 06:10:48 【问题描述】:

我有一个不知道如何解决的表/sql 问题。

我需要使用订单 ID 更新/创建用户 ID 表。

因此,我必须通过在旧列表中搜索电子邮件来获取新的 user_id。 使用电子邮件地址,我需要查找新的用户 ID。

所以逻辑是这样的: order_id -> 查看旧的 user_id -> 查看电子邮件 -> 查看新的 user_id

我尝试创建一个示例:

---------------------
TABLE: USERS_OLD (a list of user ids and an email adress)
id  email
1   test1@email.com
2   test2@email.com
3   test3@email.com
4   test4@email.com
---------------------

---------------------
TABLE: USER_ORDERS_OLD (the connection of an order id with a user id)
user_id     order_id
1           DLEFGM
2           OPDFGT
3           UZDFGP
4           POIDSX
---------------------

---------------------
TABLE: USERS_NEW (a new list of users id with the same emails from table USERS_OLD)
id  email
5   test1@email.com
9   test2@email.com
10  test3@email.com
17  test4@email.com
---------------------

What I want to create:
---------------------
TABLE: USER_ORDERS_NEW
user_id     order_id
5           DLEFGM
9           OPDFGT
10          UZDFGP
17          POIDSX
---------------------

我不知道该怎么做。我什至不知道要搜索什么。

我设法做的是一个 LEFT JOIN sql 语句来比较用户 ID 并创建一个匹配的用户 ID 列表。 但我不知道如何查找更多的表格......

希望有人可以帮助我。 如果它更容易,我也可以尝试在电子表格中进行。

提前致谢!

【问题讨论】:

所以你可以查一下旧的用户id,因为新的订单id和旧的订单id是一样的?或者这里有什么联系?然后您可以从旧用户表中获取电子邮件,然后将您引导到新用户 ID?或者你是说新的订单表有旧的用户ID? 【参考方案1】:

假设您只想返回查询然后使用;

SELECT u3.id, u2.order_id
FROM USERS_OLD u1
JOIN USER_ORDERS_OLD u2 ON u1.id = u2.user_id
JOIN USERS_NEW u3 ON u1.email = u3.email;

但是,如果要将结果写入新表,则需要先创建表。

CREATE TABLE USER_ORDERS_NEW (user_id INTEGER, order_id VARCHAR(50));

INSERT INTO USER_ORDERS_NEW (user_id, order_id)
       SELECT u3.id, u2.order_id
       FROM USERS_OLD u1
       JOIN USER_ORDERS_OLD u2 ON u1.id = u2.user_id
       JOIN USERS_NEW u3 ON u1.email = u3.email;

见Demo

【讨论】:

太完美了,非常感谢!!由于我想要一个更新的用户订单表,它将用于导入,我不得不扭转局面。此外,我还有更多应该保留的列。我更新了 dbfiddle。你能不能看看,如果这很好。它似乎工作:dbfiddle.uk/… 是的,我觉得不错。【参考方案2】:

通过您的示例,您应该能够使用此查询来完成此操作

INSERT INTO user_orders_new (user_id, order_id) SELECT usr_new.id, ord_old.order_id 
FROM users_old usr_old JOIN users_new usr_new ON usr_new.email = usr_old.email
                       JOIN user_orders_old ord_old ON ord_old.user_id = usr_old.id;

如果您打算迁移 id 而不管他们是否有订单,您可能希望在旧订单表上选择 LEFT JOIN,尽管我认为这不是用新用户填充新订单表的意图没有下单的id。

【讨论】:

以上是关于通过查找另外两个表来更新用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 中多次查找同一张表

通过比较两个表来更新 SQL 查询

SpringMVC框架并发时出现id变成另外一个用户id问题

查找并更新某些用户信息列

JPA的一对多,多对多用法

每周从 user_id 和 date 查找新的活跃用户