使用外键关系更新从另一个表中选择的电子邮件

Posted

技术标签:

【中文标题】使用外键关系更新从另一个表中选择的电子邮件【英文标题】:update email selected from another table using the foreign key relation 【发布时间】:2019-10-09 10:52:29 【问题描述】:

我有 3 个表,分别称为 ContactAPP_UserCustomer Table。在这里,我想根据 Contact_ID 从我的联系人表中选择电子邮件作为 App_User 表中的外键,并且我想根据 App_User_Id 作为客户表中的外键和 APP_User 表中的主键将所选电子邮件更新到我的客户表中。

显然:- 我想获取Contact.contact_ID = APP_User.Contact_ID 的电子邮件并将获取的电子邮件更新为Customer.emial where APP_User.App_User_Id = Customer.App_User_Id

UPDATE CRM.CRM_CUSTOMER_USER 
  SET EMAIL = (SELECT EMAIL 
               FROM QA29.ST_CONTACT 
                 INNER JOIN QA29.ST_APP_USER ON QA29.ST_CONTACT.CONTACT_ID = 129) 
WHERE APP_USER_ID = 120; 

但结果是:

ORA-01427: 单行子查询返回多于一行

【问题讨论】:

你写过代码吗? 是的,我写了这个查询,但它是错误 ORA-01427: 单行子查询返回多行 UPDATE CRM.CRM_CUSTOMER_USER SET EMAIL = (SELECT EMAIL FROM QA29.ST_CONTACT INNER JOIN QA29.ST_APP_USER ON QA29.ST_CONTACT.CONTACT_ID = 129) WHERE APP_USER_ID = 120; 您的子查询在两个表之间没有合适的连接条件 或者如果QA29.ST_CONTACT.CONTACT_ID 是PK,你根本不需要加入子查询。 【参考方案1】:

内部查询中缺少连接条件。

以下查询必须返回多行,这是问题的原因:

SELECT
    EMAIL
FROM
    QA29.ST_CONTACT
    INNER JOIN QA29.ST_APP_USER ON QA29.ST_CONTACT.CONTACT_ID = 129;

您必须使用有效的连接条件将其限制为单个记录,如下所示:

UPDATE CRM.CRM_CUSTOMER_USER
SET
    EMAIL = (
        SELECT
            EMAIL
        FROM
            QA29.ST_CONTACT
            INNER JOIN QA29.ST_APP_USER 
            ON QA29.ST_CONTACT.APP_USER_ID = QA29.ST_APP_USER.APP_USER_ID -- OR SOMETHING LIKE THIS
            AND QA29.ST_CONTACT.CONTACT_ID = 129
    )
WHERE
    APP_USER_ID = 120;

干杯!!

【讨论】:

以上是关于使用外键关系更新从另一个表中选择的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

当用户通过电子邮件更新记录时,如何通过从指定表中选择记录的 status_id 来通知所有管理员

外键引用目标不存在

Laravel 与复合外键的关系

从另一个线程更新 excel 电子表格

如何通过 PhpMyAdmin 存储外键?

使用外键搜索表中