mysql - 在 mysql 中使用 webscraper 为数据库插入编写触发器......不断收到不同的错误
问题描述
我不是超级有经验,虽然我确实有一些 MySQL 经验。我有一个问题试图用触发器解决,但事实证明它比我想象的要复杂得多,希望得到一些建议。
我有两张桌子。表 A 和表 B。
我们收到了客户的请求,其中包含他们的数据。每一批新的请求都被网络抓取器抓取(这是我们唯一能做到的方法,所以忽略这个过程听起来有多奇怪),转储到 A,然后它应该去 B,去掉重复,然后根据数据向他们发送电子邮件。我看不到网络爬虫是如何插入数据的,所以它就出来了。
因为客户提交了多个请求或者同一个人有不同的请求,所以数据需要是唯一的,但不是唯一的。我们希望将每个请求记录为唯一请求,即使它来自同一客户。一些客户共享一个名字,或者他们返回一个不同的请求。
因此,我使表 B 具有唯一的主键:姓名、电子邮件、地址和注释。(如果我对唯一索引的看法是正确的,那么任何匹配的索引都会更新,如果有两个 John Smiths,这会很糟糕,所以它是主键)。
我已经尝试了不同的方法来做到这一点,在整个网站的多个线程上进行示例,但我已经在这个问题上几天了,我正在失去它!!!!我知道我做错了什么,但是什么?!我最终做的是:
TABLEA 上的触发器,AFTER_INSERT:
tableA_to_email
(
customer_name, customer_email, customer_phone, customer_address)
VALUES ((
SELECT
new.customer_name
FROM
tableA
WHERE
customer_name = new.customer_name),
(
SELECT
new.customer_email
FROM
tableA
WHERE
customer_email = new.customer_email),
(
SELECT
new.customer_phone
FROM
tableA
WHERE
customer_phone = new.customer_phone),
(
SELECT
new.customer_address
FROM
tableA
WHERE
customer_address = new.customer_address))
ON DUPLICATE KEY UPDATE
customer_phone = VALUES(customer_phone)
输入一个空表: insert INTO tableA ( customer_name
, customer_phone
, customer_email
, customer_address
) VALUES("7", "0", "8", "0");
输出:MySQL 说:文档
1242 - 子查询返回多于 1 行
我理解错误,但上面的输入不超过一行?我在一张空桌子上试了一下,所以...
解决方案
基本上,在您的方法中,您只能从您所做的所有选择中输入 1 个结果,显然您得到了一个包含多个成员的结果
所以
INSERT INTO tableA_to_email
(
customer_name, customer_email, customer_phone, customer_address)
VALUES ((
SELECT
new.customer_name
FROM
tableA
WHERE
customer_name = new.customer_name LIMIT 1),
(
SELECT
new.customer_email
FROM
tableA
WHERE
customer_email = new.customer_email LIMIT 1),
(
SELECT
new.customer_phone
FROM
tableA
WHERE
customer_phone = new.customer_phone LIMIT 1),
(
SELECT
new.customer_address
FROM
tableA
WHERE
customer_address = new.customer_address LIMIT 1))
ON DUPLICATE KEY UPDATE
customer_phone = VALUES(customer_phone)
将毫无问题地运行,因为每个选择只返回 1 行。
但你只能做
INSERT INTO tableA_to_email
( customer_name, customer_email, customer_phone, customer_address)
VALUES (
new.customer_name,
new.customer_email,
new.customer_phone,
new.customer_address
)
ON DUPLICATE KEY UPDATE
customer_phone = VALUES(customer_phone)
这也有效
推荐阅读
- java - 可运行的 javafx 应用程序中的 Unirest
- javascript - 从另一个代码库运行 tensorflow
- javascript - 创建视图模型并收到未捕获的类型错误,无法读取未定义的属性映射
- jmeter-5.0 - 如何使用 JMeter 中的 Bean Shell 断言将数据库查询结果与字符串进行比较
- docker - 启动进入后台的命令后 Docker 退出。那么我们如何才能从这项服务中受益呢?
- swift - Swift Firestore 无法将数据获取到对象
- algorithm - 在不遍历所有其他对象的情况下查找范围内对象的算法?
- android - 无法刷新活动(列表视图)
- mysql - SQL:配对和计数样本
- docker-container - 适用于具有 azure 文件共享的容器的 Azure Web 应用