Comunidad de diseño web y desarrollo en internet online

problema con consulta a dos tablas

Citar            
MensajeEscrito el 30 Sep 2009 02:37 am
Buenas a todos!!!
estoy teniendo el siguiente problema:
tengo 2 tablas: contactosconmailsy hoja1 ... las 2 tablas son iguales y quiero pasar todos los datos de hoja1 a contactosconmails .. el tema es que el campo email es unique ,entonces no puede haber repetidos .. y se que en hoja1 hay repetidos con respecto a contactosconmails entonces hice la siguiente consulta:

SELECT * FROM hoja1,contactosconmails
WHERE contactosconmails.email != hoja1.email

Lo raro es lo siguiente :
contactosconmail : 4500 datos
hoja1 : 1000 datos

resultado de la consulta : 4.580.650 datos!!!

escualquiera!!! como que me los repite a todos lo de una talba todas la veces que encuentra un dato ... pero realmente no entiendo que es lo que hago mal!!!
no es una consulta compleja...
alguien me puede ayudar??
Muchas gracias!!!

Por pabletein

86 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 05 Oct 2009 02:12 am
Mmm que te diré, estás aplicando un razonamiento equivocado para tratar de resolver tu problema...y MySQL hace exactamente lo que le pides...

Supongamos que tienes tbl_a y tbl_b con los siguientes datos(lo sé, nací con talento para bautizar tablas :lol: ):

Código MySQL :

tbl_a
ida , letra
1 , D
2 , B
3 , C

Código MySQL :

tbl_b
idb , letra
1 , V
2 , Y
3 , Z
4 , W


Si haces SELECT * FROM tbl_a,tbl_b WHERE NOT tbl_a.letra=tbl_b.letra (prefiero usar NOT en lugar de !), MySQL toma el primer elemento de tbl_a: D (en este caso) y lo compara con los elementos de tbl_b... en la primera pasada obtiene 4 registros(puesto que no hay ninguna D en tbl_b) mmm bueno creo que ya sabes que pasará cuando le toque a los registros restantes de tbl_a.

Te servirá un DISTINCT...

"Aaaah imagino que el * lo pusiste para ahorrarte el escribir los nombres de los campos aquí en el post, pero por si acaso:" siempre usa los nombres de los campos en el SELECT...

Hasta luego, espero resuelvas tu problema....

Por Janhell

25 de clabLevel



 

San Luis Potosi, Mexico

firefox
Citar            
MensajeEscrito el 05 Oct 2009 03:03 am
Intenta esto:

Código MySQL :

SELECT 
    h.*
FROM `hoja1` h 
LEFT JOIN `contactosconmails` c USING(email)
WHERE c.email IS NULL
GROUP BY h.email


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 05 Oct 2009 12:28 pm
Gracias por las respuestas!!!
Esta tarde las pruebo y les comento!!!
gracias!!

Por pabletein

86 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 05 Oct 2009 09:20 pm

Maikel escribió:


Código MySQL :

SELECT 
    h.*
FROM `hoja1` h 
LEFT JOIN `contactosconmails` c USING(email)
WHERE c.email IS NULL
GROUP BY h.email



Maikel yo tambien usaba el USING() , por recomendacion de dano comenze a usar tbl1.id = tbl2.id.-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie8
Citar            
MensajeEscrito el 05 Oct 2009 09:32 pm
USING es un atajo y en verdad no creo que sea SQL standard, por eso la recomendación de Dano.

Ahora, MySQL y PostgreSQL lo soportan por uso el atajo cuando puedo.

De hecho esa consulta que hice, sé que funciona en MySQL, más no en PostgreSQL.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.