2011-11-14 18 views
7

Tengo tres tablas: contactos, dominios y contacts_domains, que forman una relación muchos a muchos.Subconjunto de actualización de MySQL que tiene

Me gustaría ejecutar una consulta que actualice la tabla contacts_domains, pero solo para los dominios que tienen exactamente un contacto.

Sé cómo SELECCIONAR las filas que me interesan, pero no cómo ACTUALIZARlas.

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

Quiero establecer contacts_domains.dominant = 1 para todos estos resultados.

Gracias!

Respuesta

-4

La solución más simple:

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 
) 

Editado.

+7

Esto no funciona porque MySQL fallaría con lo siguiente: '' ERROR 1093 (HY000): No se puede especificar de destino la tabla 'cd' para la actualización en la cláusula FROM'' –

+0

no funciona como se indicó anteriormente. – sym

28

Tuve un problema como este. Pruebe con la unión con la tabla hacen con selecto:

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 

esperan que ayude a

+9

muy simple: piotreks la respuesta es correcta y funciona, la respuesta aceptada es incorrecta y no funciona (como se menciona en el comentario) – bytepirate

+0

esta funcionó para mí. Gracias – sym

Cuestiones relacionadas