2011-11-14 26 views
7

Ho tre tabelle: contatti, domini e contatti_domini, che formano una relazione molti-a-molti.Sottoinsieme aggiornamento MySQL Avendo

Vorrei eseguire una query che aggiorni la tabella contacts_domains, ma solo per i domini che hanno esattamente un contatto.

So come selezionare le righe che mi interessano, ma non come aggiornarle.

SELECT domain_id, contact_id, dominant 
FROM contacts_domains 
GROUP BY domain_id 
HAVING COUNT(contact_id) = 1 

Voglio impostare contacts_domains.dominant = 1 per tutti questi risultati.

Grazie!

risposta

-4

La soluzione più semplice:

UPDATE contacts_domains cd SET cd.dominant = 1 
WHERE cd.id IN (
SELECT dominant_id 
FROM contacts_domains 
GROUP BY domain_id 
HAVING COUNT(contact_id) = 1 
) 

cura.

+7

Questo non funziona perché MySQL fallirebbe con il seguente: '' ERRORE 1093 (HY000): Non è possibile specificare la destinazione tabella 'cd' per l'aggiornamento nella clausola FROM'' –

+0

non funziona come detto sopra. – sym

28

Ho avuto un problema come questo. Prova con l'adesione con la tabella fare con select:

UPDATE contacts_domains cd, 
(SELECT id FROM contacts_domains GROUP BY domain_id 
    HAVING COUNT(contact_id) = 1) AS cdtmp 
SET cd.dominant = 1 
WHERE cd.id = cdtmp.id 

auguriamo che contribuiscano

+9

molto semplice: la risposta di piotrek è corretta e funziona, la risposta accettata è sbagliata e non funziona (come menzionato nel commento) – bytepirate

+0

questo ha funzionato per me. Grazie – sym