Comunidad de diseño web y desarrollo en internet online

Sentencia SQL

Citar            
MensajeEscrito el 15 Abr 2008 08:37 pm
Resulta pasa y acontece que tengo lo siguiente... Tengo dos tablas (solicitud y respuesta) y necesito listar todas las solicitudes con sus respuestas asociadas (y en caso de no tenerla dejar el espacio en blanco o algo por el estilo)

Ej gráfico:

Código :

SOLICITUD ===== RESPUESTA
solic1 -----------> resp1
solic2 -----------> resp2
solic2 -----------> resp3
solic3 --------------> X
solic4 -----------> resp4
solic4 -----------> resp5
solic5 --------------> X


en este caso las solicitudes 3 y 5 no tienen respuestas asociadas.

Como #$%&? podría hacerse este listado.? :ownz:

PD: es en postgres, pero con el sql básico o al menos con pistas me conformaría...

Por mauril26

161 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Abr 2008 09:03 pm

Código :

SELECT S.nombre_solicitud, R.nombre_respuesta
FROM Solicitud S
LEFT JOIN Respuestas R ON S.solicitud_id = R.solicitud_id

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 15 Abr 2008 09:10 pm
malvado maikel... :|

malvada ignorancia (la mia)... :sueno:

PD: gracias.!
PD2: me sale "curso" de postgres...

Por mauril26

161 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Abr 2008 09:20 pm
Hay que agregar en el ON la posibilidad de que el lado derecho sea nulo, de lo contrario no te traerá el resultado que esperas.

Código :

SELECT S.nombre_solicitud, R.nombre_respuesta
FROM Solicitud S
LEFT JOIN Respuestas R 
ON (S.solicitud_id = R.solicitud_id OR R.solicitud_id IS NULL)

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 15 Abr 2008 09:36 pm
Con "el lado derecho" te refieres a Respuesta.?
de todos modos probé de ambas maneras y funcionó...
En que caso fallaría la teoria del big bang de maikel.?

Por mauril26

161 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Abr 2008 09:45 pm
De hecho para eso se usa LEFT y no INNER, para que incluya lo que son NULL.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 15 Abr 2008 10:13 pm

Dano escribió:

Hay que agregar en el ON la posibilidad de que el lado derecho sea nulo, de lo contrario no te traerá el resultado que esperas.

Código :

SELECT S.nombre_solicitud, R.nombre_respuesta
FROM Solicitud S
LEFT JOIN Respuestas R 
ON (S.solicitud_id = R.solicitud_id OR R.solicitud_id IS NULL)


No bastaría con un RIGHT JOIN?, o en su defecto, Respuestas LEFT JOIN solicitud?.

Por Darel

725 de clabLevel

5 tutoriales

 

I'm a human

firefox
Citar            
MensajeEscrito el 15 Abr 2008 10:18 pm
Perdón, lo que agregué solo es necesario en el Where(me quede pensando en otro tema que hablaba de búsquedas). En el ON no es necesario.


Por ejemplo si quisieras hacer un filtro donde Te mostrará unicamente las preguntas que NO tienen respuesta, tendrías que aplicar lo que te comento:

Código :

SELECT S.nombre_solicitud, R.nombre_respuesta
FROM Solicitud S
LEFT JOIN Respuestas R ON S.solicitud_id = R.solicitud_id
WHERE
   R.solicitud_id IS NULL


Saludos :wink:

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 16 Abr 2008 01:16 am
ahm... asi si... ya creia que habia perdido el tiempo en la universidad... por poco y me suicido, cuidado con lo que escriben.

Gracias por la aclaratoria Dano

Por mauril26

161 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.