gpt4 book ai didi

mysql - 根据连接表的结果更新 MySQL 表

转载 作者:行者123 更新时间:2023-11-30 00:04:31 25 4
gpt4 key购买 nike

我有三个表:电子邮件、person_details 和 data_providers。基本上我所有的用户 ID、电子邮件和当前分配的 data_providers_id 都存储在 emails 表中。

第二个表 person_details 包含由多个数据提供者收集的人口统计信息,每行由与 emails.id data_providers_id 相关的 emails_id 标识,而 data_providers_id 与第三个表 data_providers.id 相关

第三个表 data_providers 包含我的每个数据提供者 ID、名称和优先级。

基本上,可以从多个来源收集用户信息,我需要UPDATE emails set data_providers_id =基于将 JOIN person_details 表和 data_providers 表的选择,按 data_providers.precedence DESC 然后 person_details.import_date ASC 排序,并使用第一个值(最高优先级,然后是最旧的 import_date)。

我试图构建查询,但我的子查询返回不止一行。这个查询有点超出我的理解范围,希望对复杂查询更有经验的人能够为我指明正确的方向。

UPDATE emails 
SET emails.data_providers_id =
SELECT person_details.data_providers_id
FROM person_details
LEFT JOIN data_providers ON person_details.data_providers_id = data_providers.id
ORDER BY data_providers.percent_payout ASC, person_details.import_date ASC ;

以下是有关这三个表的一些详细信息(如果有帮助的话)。任何指导将不胜感激。预先感谢:)

电子邮件表:

+-------------------+---------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+---------------------+------+-----+---------------------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| data_providers_id | tinyint(3) unsigned | NO | MUL | NULL | |
| email | varchar(255) | NO | UNI | NULL | |
+-------------------+---------------------+------+-----+---------------------+----------------+

人物详细信息:

+-------------------+---------------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+---------------------+------+-----+---------------------+-------+
| emails_id | int(11) unsigned | NO | PRI | NULL | |
| data_providers_id | tinyint(3) unsigned | NO | PRI | NULL | |
| fname | varchar(255) | YES | | NULL | |
| lname | varchar(255) | YES | | NULL | |
| address_line1 | text | YES | | NULL | |
| address_line2 | text | YES | | NULL | |
| city | varchar(255) | YES | | NULL | |
| state | varchar(2) | YES | | NULL | |
| zip5 | varchar(5) | YES | | NULL | |
| zip4 | varchar(4) | YES | | NULL | |
| home_phone | varchar(10) | YES | | NULL | |
| mobile_phone | varchar(10) | YES | | NULL | |
| work_phone | varchar(10) | YES | | NULL | |
| dob | date | YES | | NULL | |
| gender | varchar(1) | YES | | NULL | |
| ip_address | varchar(15) | NO | | NULL | |
| source | varchar(255) | NO | | NULL | |
| optin_datetime | datetime | NO | MUL | NULL | |
| import_date | timestamp | NO | | 0000-00-00 00:00:00 | |
+-------------------+---------------------+------+-----+---------------------+-------+

data_providers 表:

+-----------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+----------------+
| id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| precedence | int(2) | YES | | 0 | |
+-----------------+---------------------+------+-----+---------+----------------+

最佳答案

要使用 SELECT 作为表达式,您必须将其放在括号中。要获取第一个值,请使用LIMIT 1:

UPDATE emails 
SET emails.data_providers_id = (
SELECT person_details.data_providers_id
FROM person_details
LEFT JOIN data_providers ON person_details.data_providers_id = data_providers.id
WHERE person_details.emails_id = emails.id
ORDER BY data_providers.percent_payout ASC, person_details.import_date ASC
LIMIT 1) ;

关于mysql - 根据连接表的结果更新 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24707378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com