Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

[SOLUCIONADO] Obtener resultados no relacionados

Estas en el tema de Obtener resultados no relacionados en el foro de Bases de Datos General en Foros del Web. Quería una consulta que en lugar de mostrarme los resultados relacionados de ambas tablas, me mostrara los que no estuvieran relacionados. Es decir lo inverso ...
  #1 (permalink)  
Antiguo 23/12/2015, 00:22
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Obtener resultados no relacionados

Quería una consulta que en lugar de mostrarme los resultados relacionados de ambas tablas, me mostrara los que no estuvieran relacionados. Es decir lo inverso a esto:
Código SQL:
Ver original
  1. SELECT * FROM coche c, motor m WHERE c.idcoche=m.idcoche


Gracias y un saludo

Última edición por gnzsoloyo; 28/12/2015 a las 09:41
  #2 (permalink)  
Antiguo 23/12/2015, 06:07
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Obtener resultados no relacionados

En programación (por ejemplo Java) utilizaría la exclamación hacia abajo para indicar los que no quiero quedandome así...
Código SQL:
Ver original
  1. SELECT * FROM coche c, motor m WHERE c.idcoche!=m.idcoche

Si alguien es capaz de decirmelo lo agradezco mucho

Última edición por gnzsoloyo; 28/12/2015 a las 09:41
  #3 (permalink)  
Antiguo 23/12/2015, 08:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener resultados no relacionados

Olvídate de los conceptos de programación. Son inaplicables en SQL.
Ve al manual básico y lee el uso de LEFT JOIN.
Y no, No aplica lo diferente a, porque el caso es lo no relacionados, concepto que no existe en programación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 23/12/2015, 09:31
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Obtener resultados no relacionados

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Olvídate de los conceptos de programación. Son inaplicables en SQL.
Ve al manual básico y lee el uso de LEFT JOIN.
Y no, No aplica lo diferente a, porque el caso es lo no relacionados, concepto que no existe en programación.
Como bien se dice una cosa es una cosa y otra cosa es otra cosa jejejeje, ya en serio la logica de programacion nada tiene que ver con la logica que se aplica en bases de datos.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 25/12/2015, 07:49
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Obtener resultados no relacionados

Ah! Muchas gracias. Lo miraré y dejaré aquí la respuesta (después de este fin de xD)
  #6 (permalink)  
Antiguo 28/12/2015, 03:19
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Obtener resultados no relacionados

Buenos días, dejo la respuesta a continuación

Código SQL:
Ver original
  1. SELECT * FROM coche WHERE NOT EXISTS (SELECT idcoche FROM motor WHERE motor.idcoche = coche.idcoche)
Pues no es necesario el uso de Left Join en este caso. El Not Exists es lo que me interesaba de la consulta.

Un saludo.

Última edición por gnzsoloyo; 28/12/2015 a las 09:38
  #7 (permalink)  
Antiguo 28/12/2015, 09:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Obtener resultados no relacionados

En ese tipo de consultas tiene mejor performance el uso de left join, hay diferentes maneras de matar una mosca ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 28/12/2015, 09:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener resultados no relacionados

Cita:
Pues no es necesario el uso de Left Join en este caso.


¿En serio?

Código SQL:
Ver original
  1. SELECT c.*
  2. FROM coche c LEFT JOIN motor m ON  M.idcoche = C.idcoche
  3. WHERE m.idcoche IS NULL

Esto es mucho más performante que lo que planteaste. Esencialmente es un ejemplo de manual, no estoy inventando nada. DE hecho, siendo que se está operando sobre FK, el LEFT JOIN muy probablemente no lea la tabla de MOTOR, sino solamente el indice FK. En tu ejemplo es altamente probable que lea ambas tablas, y dependiendo del DBMS, ese WHERE puede ser muy antiperformante.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 29/12/2015 a las 09:11
  #9 (permalink)  
Antiguo 29/12/2015, 02:40
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Obtener resultados no relacionados

Cita:
Iniciado por gnzsoloyo Ver Mensaje


¿En serio?

Código SQL:
Ver original
  1. SELECT c.*
  2. FROM coche c LEFT JOIN motor m ON  M.idcoche = C.idcoche
  3. WHERE m.idcoche IS NULL

Esto es mucho más performante que lo que planteaste. Esencialmente es un ejemplo de manual, no estoy inventando nada. DE hecho, siendo que se está operando sobre FK, el LEFT JOIN muy probablemente no lea la tabla de MOTOR, sino solamente el indice FK. En tu ejemplo es altamente probable que lea amñas tablas, y dependiendo del DBMS, ese WHERE puede ser muy antiperformante.
Lo primero de todo, gracias por contestar con una solución que aporta mejor rendimiento a la consulta.

Por otro lado, me gustaría puntualizar que si he preguntado es porque no sé tanto de bases de datos. Soy consciente de que es fundamental y bla bla bla, pero llevando dos años estudiando (no solo bases de datos) y especializándome en algo que no es totalmente base de datos, como comprenderás al final hay cosas que se olvidan (o que ni me han hablado, como es este caso sobre el rendimiento de las consultas, que mirando el manual efectivamente los left join son mejores que varios select) y utilizas lo que recuerdas, especialmente cuando en el trabajo te piden las cosas para ayer, cobras una miseria, y sigues matándote a estudiar. Para colmo nadie valora lo que haces, llegas a un foro para aprender a hacer las cosas mejor y te encuentras con que te meten palos por no saber tanto como ellos... Que quieres que te diga, no soy un experto en bases de datos, pero con lo que sé intento hacerlo lo mejor que puedo, y si pregunto, me mandan al manual (algo muy razonable) y encuentro una solución (que he encontrado en un manual, por cierto) y me molesto en postearla, como mínimo respeta a la persona que está detrás de la pantalla y que ha preguntado y se ha esforzado (no me he tocado las narices, incluso antes de postear ya había estado buscando). Básicamente porque no sabes quién hay detrás.

PD: Por si alguien quiere entrar en más detalles
http://www.aulaclic.es/sql/t_3_4.htm
https://www.imaginanet.com/blog/dife...ight-join.html

Última edición por Mechabits; 29/12/2015 a las 02:59
  #10 (permalink)  
Antiguo 29/12/2015, 08:45
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Obtener resultados no relacionados

Por eso mismo porque te mataste buscando y encontraste una solucion que no es la mejor se te esta diciendo que existen otras maneras de resolver el problema, a todos nos paso como a ti no saber sobre un tema e investigamos y fuimos aprendiendo poco a poco, no se esta demeritando lo que hiciste, solamente se te esta diciendo que aunque encontraste una solucion existe una manera de hacerlo mejor, tampoco te sientas ofendido porque se te corrige
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 29/12/2015, 10:29
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Obtener resultados no relacionados

Cita:
Iniciado por Libras Ver Mensaje
Por eso mismo porque te mataste buscando y encontraste una solucion que no es la mejor se te esta diciendo que existen otras maneras de resolver el problema, a todos nos paso como a ti no saber sobre un tema e investigamos y fuimos aprendiendo poco a poco, no se esta demeritando lo que hiciste, solamente se te esta diciendo que aunque encontraste una solucion existe una manera de hacerlo mejor, tampoco te sientas ofendido porque se te corrige

Pues no es necesario el uso de Left Join en este caso.
Cita:
Iniciado por gnzsoloyo Ver Mensaje


¿En serio?
Podría haberlo dicho con otros modos, o directamente no hacer mención. No me ofendo porque se me corrija (y lo primero que le di fue las gracias por enseñarme otra forma más correcta, tal y como puedes comprobar), sino por los modos.
  #12 (permalink)  
Antiguo 29/12/2015, 10:35
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Obtener resultados no relacionados

yo la verdad no lo veo tan ofensivo, he visto post peores, ademas fue un poco de sarcasmo solamente......pero bueno cada quien se lo toma como quiere :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 29/12/2015, 10:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener resultados no relacionados

Si te molesta algo de mis respuestas o de mi estilo, siempre puedes recurrir a MP para resolver la dicrepancia. Tienes antigüedad suficiente para usarlos.
Observaciones de esa clase desvirtúan el hilo del tema. Lo cierro para seguir el tema por canales mas adecuados, si lo deseas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: relacionados, resultados, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 21:46.