Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-03-2008
Avatar de paladincubano
paladincubano paladincubano is offline
Miembro
 
Registrado: jul 2007
Posts: 147
Poder: 17
paladincubano Va por buen camino
Duda en Comando SQL

Hola foreros, tengo la siguiente clausula SQL en delphi:

Código SQL [-]SELECT A.*,B.*,C.*,D.* FROM Inscripciones A,Clientes B,Cursos C, Facturas D
WHERE A.idCliente=B.idCliente
AND A.idCurso=C.idCurso
AND C.AliasCurso=xxxxxxxxxxxxxxxx
AND (A.idFactura=D.idFactura)
ORDER BY A.idInscripcion


Esto me retorna todos los datos que quiero, todos los clientes inscritos en el curso xxxxxxxxx que tenga su factura, pero tambien quiero que me retorne A.idFactura is Null, osea, los clientes inscritos que no tienen facturas. Cuando puse esta linea (AND A.idFactura=D.idFactura or A.idFactura is Null) me retorno miles de nombres repetidos y cantidad de cosas extranas)
Las tablas son.
Clientes: idCliente, nombre, apllidos, etc.
Inscriciones: idCliente, idCurso, idFactura, precio, etc.
Cursos: idCurso, nombrecurso, etc.
Facturas: idCliente, idfactura, valor, aliasfactura, etc

gracias por todo.
Responder Con Cita
  #2  
Antiguo 31-03-2008
iuqrul iuqrul is offline
Miembro
 
Registrado: dic 2004
Ubicación: Cartagena
Posts: 36
Poder: 0
iuqrul Va por buen camino
Prueba esto:

SELECT A.*,B.*,C.*,D.*
FROM Inscripciones A,Clientes B,Cursos C
left join Facturas D on (A.idFactura=D.idFactura)
WHERE A.idCliente=B.idCliente
AND A.idCurso=C.idCurso
AND C.AliasCurso=xxxxxxxxxxxxxxxx
ORDER BY A.idInscripcion


Piensa que usando join (más claro y recomendable aunque se escribe más), tu consulta equivale a:


SELECT A.*,B.*,C.*,D.*
FROM Inscripciones A
join Clientes B on (A.idCliente=B.idCliente)
join Cursos C on (A.idCurso=C.idCurso)
left join Facturas D on (A.idFactura=D.idFactura)
WHERE C.AliasCurso=xxxxxxxxxxxxxxxx
ORDER BY A.idInscripcion
Responder Con Cita
  #3  
Antiguo 31-03-2008
Avatar de paladincubano
paladincubano paladincubano is offline
Miembro
 
Registrado: jul 2007
Posts: 147
Poder: 17
paladincubano Va por buen camino
Muchas gracias,
he probado lo que me dices y cuando intento activar el Query me da el error:

El identificador formado por varias partes "A.idFactura" no se pudo enlazar.
Responder Con Cita
  #4  
Antiguo 31-03-2008
Avatar de paladincubano
paladincubano paladincubano is offline
Miembro
 
Registrado: jul 2007
Posts: 147
Poder: 17
paladincubano Va por buen camino
Bueno, de momento he probado el segundo caso que me distes y ese si que ha funcionado. El primero no se el porque.
Ahora, me habian dicho que el JOIN era lo mismo que el select por eso no usaba el JOIN porque habia aprendido a hacerlo todo con el select, pero busando info me he encontrado que el LEFT JOIN tambien te devuelve lso valores nulos, es eso lo que hace no?
Muchas gracias, eres un crack, jejeje.
Responder Con Cita
  #5  
Antiguo 31-03-2008
iuqrul iuqrul is offline
Miembro
 
Registrado: dic 2004
Ubicación: Cartagena
Posts: 36
Poder: 0
iuqrul Va por buen camino
Al seleccionar las tablas separadas por comas, la base de datos entiende que son todos INNER JOIN, pero tú necesitabas en esa relación un LEFT JOIN, que trae todos los registros de la izquierda (Inscripciones), aunque la tabla Facturas (virtualmente a la derecha) no esté vinculada por el campo idFactura.

Respecto a la primera consulta, es un error mio, no se puede mezclar selección de tablas por comas con join, el segundo SQL funciona porque todo está relacionado con join. Lo hice para no soltarte el churro de join a la primera, pero en este caso es necesario.

Me alegro que se resuelva tu problema.
Responder Con Cita
  #6  
Antiguo 31-03-2008
Avatar de paladincubano
paladincubano paladincubano is offline
Miembro
 
Registrado: jul 2007
Posts: 147
Poder: 17
paladincubano Va por buen camino
pues hombre muchas gracias por todo.
Hoy cuando llegue a casa pues me estudiare bien los join y creo que voy a empezar a usarlos en vez de los select (a no ser que sea algo sencillo, creo).
Otras vez mas gracias por todo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
comando chr y ord Errewaydanny Varios 2 24-08-2007 04:20:17
Comando del API de Windows 1 pab4146 API de Windows 3 18-02-2005 11:33:32
Comando S.O. fjcg02 API de Windows 18 13-09-2004 22:47:30
Programa comando Diegoval Varios 5 04-06-2004 00:00:22
Duda con comando en SQL chakal SQL 4 16-04-2004 14:44:41


La franja horaria es GMT +2. Ahora son las 21:20:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi