mysql - 在更新中使用子查询转换此选择

标签 mysql sql database subquery

我有以下查询:

SELECT 
        (SELECT 
            MIN(IFNULL(lead2.ID_FATHER,lead2.ID)) as ID_FATHER
        FROM 
            leads lead2
        WHERE
            lead2.TELEFONE_RESIDENCIAL = lead1.TELEFONE_RESIDENCIAL
            OR lead2.TELEFONE_RESIDENCIAL = lead1.TELEFONE_CELULAR
            OR lead2.TELEFONE_RESIDENCIAL = lead1.TELEFONE_COMERCIAL
            OR lead2.TELEFONE_CELULAR = lead1.TELEFONE_RESIDENCIAL
            OR lead2.TELEFONE_CELULAR = lead1.TELEFONE_CELULAR
            OR lead2.TELEFONE_CELULAR = lead1.TELEFONE_COMERCIAL
            OR lead2.TELEFONE_COMERCIAL = lead1.TELEFONE_RESIDENCIAL
            OR lead2.TELEFONE_COMERCIAL = lead1.TELEFONE_CELULAR
            OR lead2.TELEFONE_COMERCIAL = lead1.TELEFONE_COMERCIAL
            OR lead2.EMAIL = lead1.EMAIL),
        lead1.ID
FROM 
    leads lead1
LIMIT 1000

我需要做这个,我更新。 我尝试过但失败了。

UPDATE 
    leads as lead1
SET
    ID_FATHER= (SELECT 
            MIN(IFNULL(lead2.ID_FATHER,lead2.ID)) 
        FROM 
            leads lead2
        WHERE
            lead2.TELEFONE_RESIDENCIAL = lead1.TELEFONE_RESIDENCIAL
            OR lead2.TELEFONE_RESIDENCIAL = lead1.TELEFONE_CELULAR
            OR lead2.TELEFONE_RESIDENCIAL = lead1.TELEFONE_COMERCIAL
            OR lead2.TELEFONE_CELULAR = lead1.TELEFONE_RESIDENCIAL
            OR lead2.TELEFONE_CELULAR = lead1.TELEFONE_CELULAR
            OR lead2.TELEFONE_CELULAR = lead1.TELEFONE_COMERCIAL
            OR lead2.TELEFONE_COMERCIAL = lead1.TELEFONE_RESIDENCIAL
            OR lead2.TELEFONE_COMERCIAL = lead1.TELEFONE_CELULAR
            OR lead2.TELEFONE_COMERCIAL = lead1.TELEFONE_COMERCIAL
            OR lead2.EMAIL = lead1.EMAIL)
LIMIT 1000

当我尝试运行代码时,出现错误,没有进行更新。

任何建议,我已经尝试过其他方法,但到目前为止还没有。

_______更新于 07/24/2015________已解决_____________

UPDATE 
    leads as lead,
    (SELECT
            (SELECT 
                MIN(IFNULL(lead2.ID_PAI,lead2.ID)) as ID_FATHER
            FROM 
                leads lead2,
                empresas empr2
            WHERE
                empr2.FK_GRUPOS_ID = empr1.FK_GRUPOS_ID
                AND(lead2.TELEFONE_RESIDENCIAL = lead1.TELEFONE_RESIDENCIAL
                OR lead2.TELEFONE_RESIDENCIAL = lead1.TELEFONE_CELULAR
                OR lead2.TELEFONE_RESIDENCIAL = lead1.TELEFONE_COMERCIAL
                OR lead2.TELEFONE_CELULAR = lead1.TELEFONE_RESIDENCIAL
                OR lead2.TELEFONE_CELULAR = lead1.TELEFONE_CELULAR
                OR lead2.TELEFONE_CELULAR = lead1.TELEFONE_COMERCIAL
                OR lead2.TELEFONE_COMERCIAL = lead1.TELEFONE_RESIDENCIAL
                OR lead2.TELEFONE_COMERCIAL = lead1.TELEFONE_CELULAR
                OR lead2.TELEFONE_COMERCIAL = lead1.TELEFONE_COMERCIAL
                OR lead2.EMAIL = lead1.EMAIL)) ID_FATHER,
            lead1.ID
    FROM 
        leads lead1,
        empresas empr1
    WHERE 
        lead1.FK_EMPRESAS_ID = empr1.ID
    )AS TD
SET lead.ID_PAI = IFNULL(TD.ID_FATHER,TD.ID)
WHERE lead.ID = TD.ID

最佳答案

试试这个:

UPDATE lead1
SET
lead1.ID_FATHER= MIN(IFNULL(lead2.ID_FATHER,lead2.ID)) 

    FROM leads as lead1,
        leads as lead2
    WHERE
        lead2.TELEFONE_RESIDENCIAL = lead1.TELEFONE_RESIDENCIAL
        OR lead2.TELEFONE_RESIDENCIAL = lead1.TELEFONE_CELULAR
        OR lead2.TELEFONE_RESIDENCIAL = lead1.TELEFONE_COMERCIAL
        OR lead2.TELEFONE_CELULAR = lead1.TELEFONE_RESIDENCIAL
        OR lead2.TELEFONE_CELULAR = lead1.TELEFONE_CELULAR
        OR lead2.TELEFONE_CELULAR = lead1.TELEFONE_COMERCIAL
        OR lead2.TELEFONE_COMERCIAL = lead1.TELEFONE_RESIDENCIAL
        OR lead2.TELEFONE_COMERCIAL = lead1.TELEFONE_CELULAR
        OR lead2.TELEFONE_COMERCIAL = lead1.TELEFONE_COMERCIAL
        OR lead2.EMAIL = lead1.EMAIL)

关于mysql - 在更新中使用子查询转换此选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31596919/

相关文章:

mysql - 获取应用程序必须提供 JDBC 连接异常

c# - 连接mysql最好的驱动是什么?

sql - postgresql 遍历 JSONB 数组并执行 SELECT

php - MySQL:如何获取带行的序号?

sql - 跟踪数据库结构的开发变化

php - 如何选择具有时间戳范围的记录?

mysql - 在 UNION 之后创建一列具有相同名称的列

sql - 索引 bool 字段

php - SQL QUERY 选择禁止列表、子级和父级连接

sql-server - 了解 SQL Server 中的 COMPATIBILITY_LEVEL