Cantidad de inne join (left join) en un select

432 views
Skip to first unread message

Daniel Flores

unread,
Aug 25, 2015, 4:27:43 PM8/25/15
to Comunidad de Visual Foxpro en Español
Hola a Todos:

Tengo el siguiente problema: tengo una tabla de pedidos y muchas tablas relacionadas. El problema es que cuando quiero hacer un select de pedidos con todos los inner join que necesito (12 mas o menos, tal vez mas) me da error diciendo que hay demasiadas subconsultas..Como se puede solucionar este problema??

Muchas Gracias

HernanCano

unread,
Aug 25, 2015, 6:46:31 PM8/25/15
to Comunidad de Visual Foxpro en Español
Daniel:

En mis acercamientos a los INNER JOIN he encontrado que cuando llego al quinto o aún al cuarto los resultados comienza a fallar.

Ojalá alguien nos pudiera mostrar algo de documentación al respecto para tratar de detectar las inconsistencias con esta cláusula.

Hasata pronto.

mpulla

unread,
Aug 25, 2015, 7:26:09 PM8/25/15
to Comunidad de Visual Foxpro en Español
Hola.

Si no mal recuerdo el limite en VFP es de 10.

Que falle al 4to o 5to, para nada, personalmente e involucrado hasta unas 6 o 7 tablas y sin problemas.

Lo que si se ve afectado es el perform, pero ya depende de la estructura de tus tablas e indices...

Hernan podrías poner un ejemplo de sql que falle?

Saludos
Mauricio

HernanCano

unread,
Aug 25, 2015, 8:20:24 PM8/25/15
to Comunidad de Visual Foxpro en Español
Lo lamento. Siempre que lo he intentado, busco solución y siempre debo (1) usar un SELECT-SQL con pocos INNER JOIN y luego (2) comandos nativos sobre el cursor resultante del paso 1, o (2a) otro SELECT-SQL adicional sobre él.

mpulla

unread,
Aug 25, 2015, 8:59:59 PM8/25/15
to Comunidad de Visual Foxpro en Español
Hola Hernan

Sería interesante ver uno de los sql a que te refieres, podríamos darte una solución.

Trabajo con Sql Server y Postgresql y solo un par de veces que me he tenido que apoyar en un cursor para dar solución a un problema.

Saludos.
Mauricio

Jorge Kiernan

unread,
Aug 25, 2015, 10:25:31 PM8/25/15
to publicesvfoxpro

Hasta donde se, El select de VFP sólo soporta 10 tablas, la principal más 9 relacionadas.

Daniel Flores

unread,
Aug 25, 2015, 10:50:53 PM8/25/15
to Comunidad de Visual Foxpro en Español
Ahí va el ejemplo que da error:

SELECT *, "ORIGINAL " AS TIPO;
FROM PEDIDOS INNER JOIN PEDI_MOV ON PEDIDOS.NRO_PEDI = PEDI_MOV.NRO_PEDI;
INNER JOIN PROVEEDORES on PEDIDOS.PROVEEDOR = PROVEEDORES.CODIGO;
INNER JOIN productos on PEDI_MOV.cod_prod = productos.codigo;
LEFT JOIN IPIC ON IPIC.CODIGO = PEDIDOS.IPIC;
LEFT JOIN GASTOS ON GASTOS.CODIGO = PEDIDOS.TGAS;
LEFT JOIN CONCEPC ON CONCEPC.CODIGO = PEDIDOS.CCOMP;
LEFT JOIN REFERAC ON REFERAC.CODIGO = PEDIDOS.RACT;
LEFT JOIN DEMAN ON DEMAN.CODIGO = PEDI_MOV.DEMAN;
LEFT join empreSA on empreSA.codigo = TICKET1.cempre;
LEFT join sector on sector.codigo = TICKET1.ccosto;
WHERE PEDIDOS.NRO_PEDI = VNRO AND PRODUCTOS.SUCURSAL = VAR_SUC;
 AND PROVEEDORES.SUCURSAL = VAR_SUC;
INTO CURSOR TICKET1 


gracias

Alejandro Isla

unread,
Aug 25, 2015, 11:26:19 PM8/25/15
to Comunidad de Visual Foxpro en Español
Y el error esssssss.......................

Daniel Flores

unread,
Aug 25, 2015, 11:33:17 PM8/25/15
to Comunidad de Visual Foxpro en Español
ERROR: "HAY DEMASIADAS SUBCONSULTAS"

gRACIAS

Víctor Hugo Espínola Domínguez

unread,
Aug 26, 2015, 12:08:54 AM8/26/15
to publice...@googlegroups.com
Hola Daniel

Qué versión de VFP tienes?

Saludos,
Víctor.
Lambaré - Paraguay.

Fernando D. Bozzo

unread,
Aug 26, 2015, 2:48:23 AM8/26/15
to Comunidad de Visual Foxpro en Español
Un dato importante:

SQL: Too many subqueries (Error 1805)

The number of subqueries allowed in Visual FoxPro 8.0 is nine per SELECT statement. In Visual FoxPro 9.0, the number of subqueries is limited by memory and disk space. For more information, see SELECT - SQL Command.



Y aunque no tenga que ver con los JOINS, sí que te puede servir tenerlo en cuenta:

SYS(3055) - FOR and WHERE Clause Complexity


Saludos.-

Carlos Miguel FARIAS

unread,
Aug 26, 2015, 8:18:21 AM8/26/15
to Grupo Fox
Que yo sepa, el único limite de VFP 9 es que la sentencia completa de SQL no puede superar 8192 caracteres.
Si mal no recuerdo, en VFP 6 había hecho pruebas de al menos 6 join sin problemas (salvo que los huevos quedaban negros por dentro de esperar).
Saludos: Miguel, La Pampa (RA)

Luis Maria Guayan

unread,
Aug 26, 2015, 8:26:23 AM8/26/15
to publice...@googlegroups.com
Que versión de VFP? En VFP9 y VFP8 creo que ese límite lo da la memoria del equipo. En versiones anteriores el límite eran 9 JOIN si mal no recuerdo

Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com

Daniel Sánchez

unread,
Aug 27, 2015, 1:17:19 AM8/27/15
to Comunidad de Visual Foxpro en Español
A mi me parece mas problemas por los campos que la consulta esta trayendo, si solo pones select *, acompañados con los join te traerá todos los campos de cada tabla join que este relacionando, en todo caso deberías solo considerar un select con los campos realmente necesitas o de las tablas que necesitas, con un select pedidos.*, solo obtendrías los campos de pedidos, y si necesitas campos de las demás tablas también indicar solo las que necesitas.

Saludos
--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047 RPM #948615385
Trujillo - Perú

P  Sugerimos no imprimir este e-mail a menos que sea absolutamente necesario. Protejamos el medio ambiente.

mpulla

unread,
Aug 27, 2015, 1:43:13 PM8/27/15
to Comunidad de Visual Foxpro en Español
Hola Daniel.

Cuando el Sql tiene más de una tabla, se recomienda usar la nomenclatura tabla.campo para seleccionar los campos de las diferentes tablas, de esta manera el SGDB no tiene que identificar que campo corresponde a que tabla.
Hacer un Sql *, además de innecesario consume recursos.

Revisa tu Sql, en el te refieres a la tabla o cursor TICKET1 dentro de los LFET y luego remites el resultado a el mismo cursor TICKET.

Saludos.
Mauricio

Luis Alberto Guerra

unread,
Aug 27, 2015, 2:51:13 PM8/27/15
to Comunidad de Visual Foxpro en Español
Conviértelo a esto y prueba si funciona:

SELECT PEDIDOS.* ;
FROM PEDIDOS INNER JOIN PEDI_MOV ON PEDIDOS.NRO_PEDI = PEDI_MOV.NRO_PEDI;
INNER JOIN PROVEEDORES on PEDIDOS.PROVEEDOR = PROVEEDORES.CODIGO;
INNER JOIN productos on PEDI_MOV.cod_prod = productos.codigo;
LEFT JOIN IPIC ON IPIC.CODIGO = PEDIDOS.IPIC;
LEFT JOIN GASTOS ON GASTOS.CODIGO = PEDIDOS.TGAS;
LEFT JOIN CONCEPC ON CONCEPC.CODIGO = PEDIDOS.CCOMP;
LEFT JOIN REFERAC ON REFERAC.CODIGO = PEDIDOS.RACT;
LEFT JOIN DEMAN ON DEMAN.CODIGO = PEDI_MOV.DEMAN;
LEFT join empreSA on empreSA.codigo = TICKET1.cempre;
LEFT join sector on sector.codigo = TICKET1.ccosto;
WHERE PEDIDOS.NRO_PEDI = VNRO AND PRODUCTOS.SUCURSAL = VAR_SUC;
  AND PROVEEDORES.SUCURSAL = VAR_SUC;
INTO CURSOR TICKET1 


Reply all
Reply to author
Forward
0 new messages