通过查找另外两个表来更新用户 ID
Update user id by looking up two other tables
我有一个 table/sql 问题,我不知道如何解决。
我需要 update/create table 个带有订单 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 并创建匹配 user_id 的列表。
但是我不知道如何查找更多 tables...
希望有人能帮助我。
如果它更容易,我也可以尝试在电子表格中进行。
提前致谢!
根据您的示例,您应该能够通过此查询完成此操作
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 table,尽管我认为这不是填充新订单 table 具有尚未下订单的新用户 ID。
假设您只想return查询然后使用;
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;
但是,如果要将结果写入新的 table,则需要先创建 table。
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
我有一个 table/sql 问题,我不知道如何解决。
我需要 update/create table 个带有订单 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 并创建匹配 user_id 的列表。 但是我不知道如何查找更多 tables...
希望有人能帮助我。 如果它更容易,我也可以尝试在电子表格中进行。
提前致谢!
根据您的示例,您应该能够通过此查询完成此操作
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 table,尽管我认为这不是填充新订单 table 具有尚未下订单的新用户 ID。
假设您只想return查询然后使用;
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;
但是,如果要将结果写入新的 table,则需要先创建 table。
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