OUTER JOIN en SQL Server 7

Hola:
¿Cómo estas?... Te escribo porque tengo un problema y espero que me puedas ayudar.
El problema es el siguiente:
Tengo que obtener de una BD en SQL Server 7 un PEDIDO con su respectivo DOCUMENTO (si es que tiene) y si existe el DOCUMENTO, obtener el DETALLE_DOCUMENTO del mismo.
El problema se presenta cuando realizo un OUTER JOIN entre la tabla PEDIDOS y la tabla DOCUMENTOS y luego realizo un JOIN común entre la tabla DOCUMENTOS y la tabla DETALLE_DOCUMENTOS.
SQL Server 7 me tira un error que dice que no se puede en una misma consulta tener involucrada una misma tabla (DOCUMENTOS en este caso) en un OUTER JOIN y en un JOIN común.
La consulta seria la siguiente:
select *
from
Pedidos p,
Documentos de,
detalle_documentos dd
where
norden = '000-210013' AND
p.rut *= d.rut AND
d.nro_comprobante = dd.nro_comprobante;
El error que tira SQL Server 7 es:
The table 'documentos' is an inner member of an outer-join clause. This is not allowed if the table also participates in a regular join clause.
Necesitaría saber si es que estoy haciendo algo mal o si hay alguna otra forma de obtener estos datos que necesito haciendo la mínima cantidad de consultas a la BD, ya que esta consulta me puede traer como resultado varios registros y no podría hacer que por cada uno vaya a buscar su detalle.
También intente utilizar Vistas dividiendo la consulta.. Pero me tira el mismo error.
Gracias...
Ximena

3 respuestas

Respuesta
1
El problema es tan sencillo como dice el error: no puedes tener una tabla que sea inner join y join a la vez porque estas diciendo que es blanca pero negra. Imposible.
Lo que yo hago cuando tengo un problema como estés es lo siguiente:
1.- Me voy al generador de vistas
2.- Incluyo todas las tablas que van a intervenir en la consulta
3.- Ahora no recuerdo si desde el editor de vistas puedo crear relaciones entre tablas o no. El caso es que creo relaciones entre las tablas tal y como lo haría normalmente. CUIDADO: la integridad referencial en SQL Server 7 funciona mal (lo han arreglado en el 2000) así que una vez termines de hacer la consulta BORRA LAS RELACIONES
4.- Creo la consulta como si estuviese en Access. Esto genera el texto de la consulta que, aunque no esta simplificado/optimizado, puedes usar en tu programa
Ahora bien, alguna vez me he encontrado (gracias a dios no muchas) con que la consulta es imposible de crear por culpa de las relaciones. Eso es por LAS TABLAS ESTÁN MAL DISEÑADAS y he tenido que rediseñarlas de nuevo.
Gracias por la respuesta.
Me imagine que era un tema un poco difícil...
El problema es que ya intente utilizar Vistas para solucionarlo, pero no funciono... lo que hice fue generar una vista con el OUTER JOIN a la tabla DOCUMENTOS y luego realice otra consulta que realacione a la VISTA que genere anteriormente y a la tabla DETALLE_DOCUMENTOS con un JOIN común. El resultado fue que me volvió a dar el mismo error anterior. Que una misma tabla no puede estar en un OUTER JOIN y en JOIN a la vez.
Así que por ahí seria bueno que me expliques un poco mejor la solución que me planteas con el Generador de Vistas en el mail anterior.
Igualmente Gracias...
Saludos...
Si has utilizado el editor de vistas de SQL Server 7.0 y te ha dado un error es por los siguientes motivos:
1.- No has definido bien las relaciones
2.- El diseño de las tablas no es correcto
Puedes tener uno o los dos errores.
En este caso es imposible que yo te pueda ayudar puesto que se trata de un problema de diseño de bases de datos.
Lo que si te garantizo es que el editor de Vistas soluciona el 100% de los casos siempre y cuando las tablas y las relaciones entre estas estén bien diseñadas.
Te recomiendo que replantees tu diseño y vuelvas a probar puesto que si realmente existe un problema de base se te ira repitiendo a lo largo de todo el desarrollo de la aplicación.
Saludos
PD: Te agradecería que recordases finalizar la pregunta cuando lo consideres oportuno. El numero de preguntas simultaneas que puedo responder es corto y si no finalizas la pregunta (sin prisas pero sin pausas) algún otro usuario (incluido tu) no podrá hacer nuevas preguntas
Gracias... el tema es que el modelo ya esta hecho y me tengo que adecuar a el, así que voy a ver como soluciono este tema. Igualmente me ayudastes ya que ahora se cual es el verdadero problema.
Respuesta
1
La respuesta es muy larga... así que te remito al mismo lugar en que yo la leí hace tiempo :)
El caso es muy similar al tuyo, no creo que te cueste adaptarlo. Si tienes más dudas puedes consultármelas :)
Salud!
http://webforums.sybase.com/nntp/nd000056.nsf/85255e6f0052055e85255d7f005ed8bc/fed33f915e0e9fd3d08aaf6fc16c9506?OpenDocument
Respuesta
1
No entiendo la clausula
AND p.rut *= d.rut
por el signo * .
Por lo demás es una consulta normal y debería andar bien. No cierres la pregunta y contame como te fue.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas