Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-09-2006
against against is offline
Miembro
 
Registrado: abr 2006
Posts: 12
Poder: 0
against Va por buen camino
Angry ¿ Fallo en MySQL ?

Buenas, hoy haciendo una consulta me encontrado con un problema, hecho dos consultas que se suponen que son similares pero que me devuelven dos resultados diferentes:

Código SQL [-]
select C.imei from linartstr C where C.imei not in (select B.imei from linarticulo A, linartstr B where A.imei = B.imei)


Esta consulta me devuelve los valores que necesitaba

Código SQL [-]
select C.imei from linartstr C where C.imei not in (select A.imei from linarticulo A)


Pero esta no, queria de la tabla linartstr obtener los imei que no estan en linarticulo.

¿Se supone que las consultas no son iguales ?
¿O es un fallo de MySQL ?

haciendo un explain de las dos consultas obtengo lo siguiente:

La 1º consulta:

1, 'PRIMARY', 'C', 'ALL', '', '', , '', 189, 'Using where'
2, 'DEPENDENT SUBQUERY', 'A', 'ALL', '', '', , '', 517, ''
2, 'DEPENDENT SUBQUERY', 'B', 'ALL', '', '', , '', 189, 'Using where'


La 2º consulta:

1, 'PRIMARY', 'C', 'ALL', '', '', , '', 189, 'Using where'
2, 'DEPENDENT SUBQUERY', 'A', 'ALL', '', '', , '', 517, 'Using where'

Pero me quedo igual leyendo esto :P

Nose si os haria falta mas informacion para comprender las consulta, si es asi os dare mas cosas.

Añadir que las tabla tienen 199 registros (linartstr) y 513 (linarticulo).

Haciendo:
Código SQL [-]
select B.imei from linarticulo A, linartstr B where A.imei = B.imei
me devuelve 189, con lo que las dos consultas de arriba deverian devolver 10 registros.

Un saludo.

Última edición por against fecha: 26-09-2006 a las 19:52:00.
Responder Con Cita
  #2  
Antiguo 26-09-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No entiendo muy bien las cosas pero parecen consultas anidadas.
Prueba:
Código SQL [-]
select C.imei from linartstr C where C.imei  <> A.imei And = C.imei  <> b.imei
Tal vez sirva o te de una idea mas.
Saludos
Responder Con Cita
  #3  
Antiguo 26-09-2006
against against is offline
Miembro
 
Registrado: abr 2006
Posts: 12
Poder: 0
against Va por buen camino
Imaginate que tienes dos cestas con bolas de colores rojas,verdes y azules. En la cesta A tienes 6 bolas: tres rojas, dos verdes y una azul y en la cesta B tienes 5 bolas: 4 rojas y 1 verde.

Entonces quiero obtener las bolas que hay en la cesta A pero no hay en la cesta B, con lo que seria una bola verde y una azul.

¿ Comprendes ?

Sobre la consulta decir que tiene errores de sintaxis: despues de una and pones un = y falta indicar las tablas A y B.

Gracias de todos modos por tu ayuda :P.

Decir que la consulta que me de el resulta ya la tengo pero mi duda es que las dos consultas que expongo arriba deberian devolver el mismo resultado cuando en verdad no lo devuelven.

Un saludo
Responder Con Cita
  #4  
Antiguo 26-09-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
En realidad:
Cita:
Imaginate que tienes dos cestas con bolas de colores rojas,verdes y azules. En la cesta A tienes 6 bolas: tres rojas, dos verdes y una azul y en la cesta B tienes 5 bolas: 4 rojas y 1 verde.

Entonces quiero obtener las bolas que hay en la cesta A pero no hay en la cesta B, con lo que seria una bola verde y una azul.
Lo que quieres es la diferencia:

Cita:
1 roja 1 verde 1 azul
Es por molestar un poco nada mas.
Dejame talvez llego, tenme paciencia.
Saludos
Responder Con Cita
  #5  
Antiguo 26-09-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Perdona mi ignorancia pero:

esto:
(select B.imei from linarticulo A, linartstr B where A.imei = B.imei)

no es igual a est
Responder Con Cita
  #6  
Antiguo 26-09-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Perdona mi ignorancia pero:
esto:
Código SQL [-]
(select B.imei from linarticulo A, linartstr B where A.imei = B.imei)
no es igual a esto
Código SQL [-]
(select A.imei from linarticulo A)
Creo la condicion cambia mucho, a mi entender nunca te daran el mismo resultado, es muy dificil sin conocer las tablas y los campos opinar a ciegas.
Por cierto, Error de dedo el =. y lo de las tablas A y B. que te digo.
No seas tan perfeccionista
Saludos
Responder Con Cita
  #7  
Antiguo 27-09-2006
against against is offline
Miembro
 
Registrado: abr 2006
Posts: 12
Poder: 0
against Va por buen camino
Esta claro que las dos condiciones no dan lo mismo, con el mismo ejemplo.

Tenemos las dos cestas, la primera condicion nos daria lo que tenemos en la cesta A y tambien esta en la cesta B, que seria 3 rojas y una verde y esto se lo estamos comparando con la cesta A, es decir:

quitamos a las 4 rojas, las dos verdes y la azul: Esto nos daria de resultado 1 verde y 1 azul, ten encuenta que la bola numero 4 roja de la cesta B no cuenta, porque queremos saber las bolas que no hay en la cesta B pero si hay en la cesta A.

Mirando lo que hay en A y hay en B tenemos 3 rojas y una verde, entonces a este resultado comparamos con lo que hay en A y obtenemos lo que no hay en el anterior resultado (las 3 rojas y una verde) resultado: una verde y una azul.

Ahora mirando con la otra condicion estariamos mirando las bolas que tenemos en la cesta B y las comparamos con las bolas que tenemos en la cesta A y veriamos que bolas hay en A pero no en B, es decir: en B tenemos 4 rojas y en A hay 3 de aqui nada, despues en B tenemos una verde y en A dos esto daria ya una bola verde y en A ya no hay mas bolas pero en B tenemos la azul, total: 1 bola verde y una bola Azul.

Es pillar el sentido de la consulta, entonces veras que realmente puedes aplicarlo con dos tablas con mismos registros.

Hay que buscar la perfección :P

¿ Me comprendes ahora mejor ?
Responder Con Cita
  #8  
Antiguo 27-09-2006
against against is offline
Miembro
 
Registrado: abr 2006
Posts: 12
Poder: 0
against Va por buen camino
El resultado que indicado esta bien porque solo quiero obtener el las bolas que tengo en la cesta A pero no estan en la cesta B, es decir si hay bolas que estan en la cesta B pero no estan en la cesta A no cuentan.

Las condiciones ya se que no devuelven lo mismo pero si que la consulta deberia devolver el mismo resultado.

En la primera consulta, la condicion daria 3 rojas y una verde esto comparado con lo que hay en la cesta A nos indicaria que en la cesta A hay una bola verde y una bola azul pero que no estan en el resultado de la condicion.

En la segunda estariamos comparando 4 rojas y una verde que hay en la cesta B con las que tenemos en la cesta A con lo que daria 1 bola verde y una bola azul.

Con pillar el sentido de las consulta se puede aplicar a cualquier caso con dos tablas que tengan un campo similar en las dos tablas, por ejemplo dos tablas con el campo codigo en la primera tienes el 2,4,5 y en la segunda el 4,5,7,9, esto daria un dos supuestamente en las dos consultas.

Hay que buscar la perfección

Ups... pense que la primera contestacion no se habia mandado, bueno tienes lo que te querio decir dicho de dos modos, perdon por repetirme :P

Última edición por against fecha: 27-09-2006 a las 13:39:50.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Me fallo el Server al arrancar Patricio Conexión con bases de datos 1 29-12-2005 15:55:31
FALLO en CAERQUES Lepe Varios 2 06-04-2005 14:09:49
Fallo de seguridad en el TCP DarkByte Noticias 4 28-04-2004 23:17:26
Fallo con la ñ en delphi 8 elpinjum Varios 1 27-02-2004 03:17:28
Fallo en actualización con CachedUpdates Marina SQL 1 31-05-2003 17:24:02


La franja horaria es GMT +2. Ahora son las 05:24:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi