Ahora si te endendi....
SELECT VIA, CALLE, MUNICIPIO FROM clientes group by VIA, CALLE, MUNICIPIO;
Si cambias la primera query por esto te funcionará. Puesto que esta solo te darà las calles una vez. Por tanto no intenetaràs insertar dos veces la misma calles. Puede seguir el problema con las calles que ya esten en la tabla calles... esto lo puedes solucionar quitando el " or die("Error:".mysql_error());" con lo que el bucle seguirá aún que en una de sus iteraciones no se ejecute el insert. Si no quieres sacar, el "or die" por seguridad luego tienes que complicar la query
Código:
SELECT cli.via, cli.calle, cli.municipio
FROM clientes AS cli LEFT JOIN calles AS cll
ON cli.municipio = cll.municipio AND cli.calle = cll.calle AND cli.via = cll.via
GROUP BY cli.via, cli.calle, cli.municipio, cll.via, cll.calle, cll.municipio
HAVING cll.via Is Null AND cll.calle Is Null AND cll.municipio Is Null;
Ahora te dará las calles de clientes una sola vez que no esten en calles.
Dos comentarios:
El indice unico lo tendras que extender a VIA, no sea que tengas en un mismo municipo una calle y una plaza o un pasaje con el mismo nombre (en mi ciudad esto se da). Pero ese indice lo tienes que poner en la tabla calles no en clientes, si no no podras entrar clientes de la misma calle y municipio
Tendrias que ir pensando como evitar que te entren calles repetidas....es difícil tener un nomenclator completo, especialmente si trabajas sobre un area muy grande...no se. (Este no se como resolver lo)
EDITO/COMPLEMENTO: Lo suyo seria que al final en la tabla clientes se guardara un id relacionado con el id de la tabla calles asi ahorrarias espacio, y la base estaria normalizada.
Quim