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

n3h0vuf2  于 2022-11-09  发布在  PHP
关注(0)|答案(2)|浏览(163)

我有一个表/SQL问题,我不知道如何解决。
我需要使用订单ID更新/创建一个用户ID表。
因此,我必须通过在旧列表中搜索电子邮件来获得一个新的用户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的列表。但是我不知道如何查找更多的表...
希望有人能帮助我。如果更容易的话,我也可以试着用电子表格来做。
提前感谢!

zzoitvuj

zzoitvuj1#

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

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

2admgd59

2admgd592#

在您的示例中,您应该能够使用以下查询完成此操作

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填充新订单表。

相关问题