Ver Mensaje Individual
  #8 (permalink)  
Antiguo 19/02/2015, 17:28
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Consulta Anidada

Bueno, por lo pronto, yo te dije claramente que usaras LEFT JOIN, no simplemente JOIN.
¿Eso se entiende?
Te mencioné el LEFT JOIN porque precisamente es la única forma en que te devuelva algo como esto:
Cita:
lamada_id|detalle_id|detalle_descripcion
1|1|detalle1
1|2|detalle2
2|3|detalle3
3|4|detalle4
3|5|detalle5
3|6|detalle6
4|null|null
5|7|detalle7
Es decir, valores nulos en la condición de la segunda tabla. Si pones JOIN eso no sucederá.
Ahora bien, para que se pueda relacionar estas dos tablas:
Código MySQL:
Ver original
  1. CREATE TABLE  `llamadas` (
  2.   `llamada_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  3.   `llamada_nombre`  longtext NOT NULL
  4. PRIMARY KEY (`llamada_id`)
  5.  
  6. CREATE TABLE  `llamada_detalle` (
  7.   `detalle_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  8.   `detalle_llamada` int(10) unsigned NOT NULL,
  9.   `detalle_descricpion` longtext NOT NULL
  10. UPDATE   PRIMARY KEY (`detalle_id`),
  11.   KEY `llamada` (`detalle_llamada`)
Voy a suponer que "detalle_llamada" es la FK (no queda demasiado claro), si ese es el caso, la consulta quedaría mas o menos así:
Código MySQL:
Ver original
  1.     L.llamada_id,
  2.     LD.detalle_id,
  3.     LD.detalle_descripcion
  4.     llamdas L
  5.         LEFT JOIN llamada_detalle LD ON L.llamada_id = LD.detalle_llamada
  6. WHERE L.llamada_id=@IDLLAMADA OR LD.detalle_llamada IS NULL;
donde "@IDLLAMADA" es un valor numérico de una llamada que buscas.
El "IS NULL", por su lado, aplicado al campo relacionado de la segunda tabla, devolverá la lista de llamadas donde no haya detalle registrado, y por tanto devuelve NULL en ambos campos.

Te recomiendo enfáticamente que los campos FK lleven el mismo nombre de la PK a la que hacen referencia. Es un ,étodo mnemotécnico que evita confusiones. En este caso sería "llamada_id".
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)