FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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. |
#2
|
|||
|
|||
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 |
#3
|
||||
|
||||
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. |
#4
|
||||
|
||||
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. |
#5
|
|||
|
|||
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. |
#6
|
||||
|
||||
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. |
|
|
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 |
|