通过查找另外两个表来更新用户 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的主要内容,如果未能解决你的问题,请参考以下文章