Ver Mensaje Individual
  #9 (permalink)  
Antiguo 29/12/2015, 02:40
Mechabits
 
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