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

[SOLUCIONADO] Consulta Anidada

Estas en el tema de Consulta Anidada en el foro de Bases de Datos General en Foros del Web. Tengo dos tablas @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original CREATE TABLE   `llamadas` (   `llamada _ id` int ( 10 ) unsigned NOT NULL ...
  #1 (permalink)  
Antiguo 19/02/2015, 12:03
Avatar de Fabu_dina  
Fecha de Ingreso: enero-2004
Mensajes: 425
Antigüedad: 20 años, 3 meses
Puntos: 1
Consulta Anidada

Tengo 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`)

suponiendo que en el encabezado existen 5 registros:

llamada_id llamada_nombre
1 nombre1
2 nombre2
3 nombre3
4 nombre4
5 nombre5

y en los detalles
detalle_id detalle_llamada detalle_descricpion
1 1 detalle1
2 1 detalle2
3 2 detalle3
4 3 detalle4
5 3 detalle5
6 3 detalle6
7 5 detalle7


lo que necesito es un Query que me de este resultado

llamada_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

Cual podria ser

Última edición por gnzsoloyo; 19/02/2015 a las 12:32
  #2 (permalink)  
Antiguo 19/02/2015, 12:36
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: Consulta Anidada

Una consulta con LEFT JOIN:
http://dev.mysql.com/doc/refman/5.0/en/join.html
http://dev.mysql.com/doc/refman/5.0/...imization.html

Es un caso de manual... lee los links y prueba. Si tienes dudas postea el intento y veremos donde falla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 19/02/2015, 14:34
Avatar de Fabu_dina  
Fecha de Ingreso: enero-2004
Mensajes: 425
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: Consulta Anidada

No me funciona me arroja solo las uniones
  #4 (permalink)  
Antiguo 19/02/2015, 14:44
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: Consulta Anidada

Cita:
Iniciado por Fabu_dina Ver Mensaje
No me funciona me arroja solo las uniones
¿No te funciona cómo?
Postea el codigo que hiciste, no podemos adivinar como lo escribiste...
Si no te funciona, no es que no funcione, sino que no lo estás haceindo correctamente.

Postea el codigo SQL intentado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 19/02/2015, 16:40
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Consulta Anidada

con un join yo uso una tabla general con 9 registros ya de ahi para la consulta jalo los datos de las otras tablas que se unieron a mi tabla general por medio de id por ejemplo

Código MySQL:
Ver original
  1. select llamadas.llamada_id, llamada_detalle.detalle_id,
  2. llamada_detalle.detalle_descripcion join llamada_detalle on llamada_detalle.detalle_id=llamadas.detalle_id
  3.  join llamada_detalle on llamada_detalle.detalle_descripcion=llamadas.detalle_descripcion
  4. where llamada_id=#

toma encuenta que tus tablas deben estar relacionadas en este caso puede ser por e id de la descripcion en la tabla llamadas
__________________
"Las piedras me las quito caminando y las pedradas tambien"

Última edición por gnzsoloyo; 19/02/2015 a las 16:42 Razón: Legibilidad de código
  #6 (permalink)  
Antiguo 19/02/2015, 16:44
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: Consulta Anidada

Eso te debe disparar un error de sintaxis. ..
No tiene ningún FROM, por lo que la sentencia está incompleta.
¿No tienes ninguna experiencia en SQL?

Cuando llegue a casa miro bien el tema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 19/02/2015, 16:53
 
Fecha de Ingreso: febrero-2015
Ubicación: tepoztlan
Mensajes: 72
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Consulta Anidada

cierto se me paso el from por andar viendo mi tema en el que tengo problemas

Código MySQL:
Ver original
  1. select llamadas.llamada_id, llamada_detalle.detalle_id,
  2. llamada_detalle.detalle_descripcion from llamdas join llamada_detalle on llamada_detalle.detalle_id=llamadas.detalle_id
  3.  join llamada_detalle on llamada_detalle.detalle_descripcion=llamadas.detalle_descripcion
  4. where llamada_id=#

ese si seria el codigo correcto
__________________
"Las piedras me las quito caminando y las pedradas tambien"
  #8 (permalink)  
Antiguo 19/02/2015, 17:28
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: 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)
  #9 (permalink)  
Antiguo 19/02/2015, 18:45
Avatar de Fabu_dina  
Fecha de Ingreso: enero-2004
Mensajes: 425
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: Consulta Anidada

muchas gracias me fue muy util su ayuda
estaba metiendo en la condicion de join un dato mal

Etiquetas: registro, 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.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:58.