Trasform this select with subquery in update

I have the following query:

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

I need to make this, I an update. I tried but failed.

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

When I try to run the code, the error, not doing update.

Any suggestions, I've tried other ways, but nothing so far.

_______Updated 07/24/2015_____________RESOLVED_____________

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

Upvotes: 0

Views: 36

Answers (1)

Coding Duchess
Coding Duchess

Reputation: 6919

try this:

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)

Upvotes: 1

Related Questions