In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Probema SQLIte con SELECT anidadas

Foro público de Xailer en español
Responder
jasm.quitaesto
Mensajes: 420
Registrado: Sab Ago 16, 2008 9:06 pm

Probema SQLIte con SELECT anidadas

Mensaje por jasm.quitaesto »

Hola
Tengo esta select que desde el programa xasqlite.exe funciona
correctamente, pero desde Xailer 2.0.18 no va:
SELECT libro.*, (SELECT librocurso.precio FROM librocurso INNER JOIN
colegiocursolibro ON librocurso.id_colegiocursolibro =
colegiocursolibro.id WHERE colegiocursolibro.id_convocatoria =
1 AND id_libro = libro.id ) AS precio FROM libro WHERE baja = 0 AND tipo
= 'L' ORDER BY libro.titulo
Error de Xailer 2.0.18 en imagen adjunta.
Saludos
Jose A. Suarez
--
jasm.quitaesto
Mensajes: 420
Registrado: Sab Ago 16, 2008 9:06 pm

Probema SQLIte con SELECT anidadas

Mensaje por jasm.quitaesto »

Será un problema sin solución o algo así­, no se. ;-)
A lo mejor nadie ha necesitado hacer SELECT anidadas nunca.
Saludos
José A. Suárez
El 05/09/2011 11:08, José Alfonso Suárez Moreno escribió:
> Hola
>
> Tengo esta select que desde el programa xasqlite.exe funciona
> correctamente, pero desde Xailer 2.0.18 no va:
>
> SELECT libro.*, (SELECT librocurso.precio FROM librocurso INNER JOIN
> colegiocursolibro ON librocurso.id_colegiocursolibro =
> colegiocursolibro.id WHERE colegiocursolibro.id_convocatoria = 1 AND
> id_libro = libro.id ) AS precio FROM libro WHERE baja = 0 AND tipo = 'L'
> ORDER BY libro.titulo
>
> Error de Xailer 2.0.18 en imagen adjunta.
>
> Saludos
>
> Jose A. Suarez
>
jasm.quitaesto
Mensajes: 420
Registrado: Sab Ago 16, 2008 9:06 pm

Probema SQLIte con SELECT anidadas

Mensaje por jasm.quitaesto »

¿Ninguna pista de que puede estar pasando?
Gracias.
El 05/09/2011 11:08, José Alfonso Suárez Moreno escribió:
> Hola
>
> Tengo esta select que desde el programa xasqlite.exe funciona
> correctamente, pero desde Xailer 2.0.18 no va:
>
> SELECT libro.*, (SELECT librocurso.precio FROM librocurso INNER JOIN
> colegiocursolibro ON librocurso.id_colegiocursolibro =
> colegiocursolibro.id WHERE colegiocursolibro.id_convocatoria = 1 AND
> id_libro = libro.id ) AS precio FROM libro WHERE baja = 0 AND tipo = 'L'
> ORDER BY libro.titulo
>
> Error de Xailer 2.0.18 en imagen adjunta.
>
> Saludos
>
> Jose A. Suarez
>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Probema SQLIte con SELECT anidadas

Mensaje por jfgimenez »

José Alfonso,
> Será un problema sin solución o algo así­, no se. ;-)
>
> A lo mejor nadie ha necesitado hacer SELECT anidadas nunca.
Esto está sacado directamente de un programa mio:
TEXT INTO cSql
SELECT Amarres.Codigo AS
Codigo,Zona,Dimensiones,Barco,NBarco,ClaveT,ClaveTip,ClavePo s,Fecha,Reservado,NReservado,
Descrip FROM Amarres
LEFT JOIN Zonas ON Zona=Zonas.Codigo
LEFT JOIN
(SELECT Destino,Barco,Fecha FROM
(SELECT * FROM
(SELECT * FROM
(SELECT * FROM
(SELECT Destino, Barco, Fecha FROM Historico WHERE
Fecha<=? ORDER BY &cORDEN.) t1
GROUP BY Barco) t2
GROUP BY Destino) t3
WHERE Destino IS NOT NULL) t4
LEFT JOIN Barcos ON Barco=Barcos.Codigo) t5
ON Amarres.Codigo=Destino
LEFT JOIN Barcos ON Barco=Barcos.Codigo
LEFT JOIN
(SELECT Reservas.Amarre AS ReservaAmarre,Barco AS Reservado, NBarco
AS NReservado FROM Reservas
LEFT JOIN Barcos ON Barco=Codigo
WHERE DeFecha<=? AND (Year(AFecha)=0 OR AFecha>=?) ) t6
ON ReservaAmarre=Amarres.Codigo
ENDTEXT
IF !Empty( ::oDeAmarre:Value )
cWhere += " AND Amarres.Codigo >= '" + Trim( ::oDeAmarre:Value ) + "'"
ENDIF
cWhere += " AND Amarres.Codigo <= '" + Trim( ::oAAmarre:Value ) + "'"
IF !Empty( ::oDeZona:Value )
cWhere += " AND Amarres.Zona >= '" + Trim( ::oDeZona:Value ) + "'"
ENDIF
cWhere += " AND Amarres.Zona <= '" + Trim( ::oAZona:Value ) + "'"
cSql += " WHERE " + Substr( cWhere, 6 ) + ;
" ORDER BY Amarres.Zona,Amarres.Codigo"
oData := oDB:QueryReport( oDB:BuildSqlSt( cSql, ::oFecha:Value,
::oFecha:Value, ::oFecha:Value ) )
Está funcionando perfectamente tanto en SQLite como en MySQL, y no creo que
se pueda decir que es una sentencia simple o sencilla. Y como puedes ver, sí­
hay sentencias anidadas.
Envianos un ejemplo autocontenido que podamos ejecutar para comprobarlo.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jasm.quitaesto
Mensajes: 420
Registrado: Sab Ago 16, 2008 9:06 pm

Probema SQLIte con SELECT anidadas

Mensaje por jasm.quitaesto »

Hola Jose,
Gracias por reponder.
Si te fijas en la imagen que adjunto en el mensaje, hay una columna
precio._RowId_ AS RowId que yo no he puesto. Aunque fuese algo necesario
para el DS, la no hay en el where ni en los inner ninguna tabla precio.
La SELECT mia es:
SELECT libro.*, (SELECT librocurso.precio FROM librocurso INNER JOIN
colegiocursolibro ON librocurso.id_colegiocursolibro =
colegiocursolibro.id WHERE colegiocursolibro.id_convocatoria = 1 AND
id_libro = libro.id ) AS precio FROM libro WHERE baja = 0 AND tipo = 'L'
ORDER BY libro.titulo
Veré si puedo hacer un ejemplo y mandarlo, pero creo que no es necesario.
Saludos
Jose Alfonso Suarez
El 27/09/2011 13:46, Jose F. Gimenez escribió:
> José Alfonso,
>
>> Será un problema sin solución o algo así­, no se. ;-)
>>
>> A lo mejor nadie ha necesitado hacer SELECT anidadas nunca.
>
> Esto está sacado directamente de un programa mio:
>
> TEXT INTO cSql
> SELECT Amarres.Codigo AS
> Codigo,Zona,Dimensiones,Barco,NBarco,ClaveT,ClaveTip,ClavePo s,Fecha,Reservado,NReservado,
> Descrip FROM Amarres
> LEFT JOIN Zonas ON Zona=Zonas.Codigo
> LEFT JOIN
> (SELECT Destino,Barco,Fecha FROM
> (SELECT * FROM
> (SELECT * FROM
> (SELECT * FROM
> (SELECT Destino, Barco, Fecha FROM Historico WHERE Fecha<=? ORDER BY
> &cORDEN.) t1
> GROUP BY Barco) t2
> GROUP BY Destino) t3
> WHERE Destino IS NOT NULL) t4
> LEFT JOIN Barcos ON Barco=Barcos.Codigo) t5
> ON Amarres.Codigo=Destino
> LEFT JOIN Barcos ON Barco=Barcos.Codigo
> LEFT JOIN
> (SELECT Reservas.Amarre AS ReservaAmarre,Barco AS Reservado, NBarco AS
> NReservado FROM Reservas
> LEFT JOIN Barcos ON Barco=Codigo
> WHERE DeFecha<=? AND (Year(AFecha)=0 OR AFecha>=?) ) t6
> ON ReservaAmarre=Amarres.Codigo
> ENDTEXT
>
> IF !Empty( ::oDeAmarre:Value )
> cWhere += " AND Amarres.Codigo >= '" + Trim( ::oDeAmarre:Value ) + "'"
> ENDIF
> cWhere += " AND Amarres.Codigo <= '" + Trim( ::oAAmarre:Value ) + "'"
>
> IF !Empty( ::oDeZona:Value )
> cWhere += " AND Amarres.Zona >= '" + Trim( ::oDeZona:Value ) + "'"
> ENDIF
> cWhere += " AND Amarres.Zona <= '" + Trim( ::oAZona:Value ) + "'"
>
> cSql += " WHERE " + Substr( cWhere, 6 ) + ;
> " ORDER BY Amarres.Zona,Amarres.Codigo"
>
> oData := oDB:QueryReport( oDB:BuildSqlSt( cSql, ::oFecha:Value,
> ::oFecha:Value, ::oFecha:Value ) )
>
>
> Está funcionando perfectamente tanto en SQLite como en MySQL, y no creo
> que se pueda decir que es una sentencia simple o sencilla. Y como puedes
> ver, sí­ hay sentencias anidadas.
>
> Envianos un ejemplo autocontenido que podamos ejecutar para comprobarlo.
>
jasm.quitaesto
Mensajes: 420
Registrado: Sab Ago 16, 2008 9:06 pm

Probema SQLIte con SELECT anidadas

Mensaje por jasm.quitaesto »

Hola Jose,
La diferencia entre la SELECT que tu pones aquí­ y la mí­a es que en
anidamiento lo haces en el JOIN, mientras que el mio está hecho en las
columnas. Algo debe estar haciendo mal el pharser que toma "AS precio"
como si fuese una tabla.
Saludos
Jose A.
El 27/09/2011 13:46, Jose F. Gimenez escribió:
> José Alfonso,
>
>> Será un problema sin solución o algo así­, no se. ;-)
>>
>> A lo mejor nadie ha necesitado hacer SELECT anidadas nunca.
>
> Esto está sacado directamente de un programa mio:
>
> TEXT INTO cSql
> SELECT Amarres.Codigo AS
> Codigo,Zona,Dimensiones,Barco,NBarco,ClaveT,ClaveTip,ClavePo s,Fecha,Reservado,NReservado,
> Descrip FROM Amarres
> LEFT JOIN Zonas ON Zona=Zonas.Codigo
> LEFT JOIN
> (SELECT Destino,Barco,Fecha FROM
> (SELECT * FROM
> (SELECT * FROM
> (SELECT * FROM
> (SELECT Destino, Barco, Fecha FROM Historico WHERE Fecha<=? ORDER BY
> &cORDEN.) t1
> GROUP BY Barco) t2
> GROUP BY Destino) t3
> WHERE Destino IS NOT NULL) t4
> LEFT JOIN Barcos ON Barco=Barcos.Codigo) t5
> ON Amarres.Codigo=Destino
> LEFT JOIN Barcos ON Barco=Barcos.Codigo
> LEFT JOIN
> (SELECT Reservas.Amarre AS ReservaAmarre,Barco AS Reservado, NBarco AS
> NReservado FROM Reservas
> LEFT JOIN Barcos ON Barco=Codigo
> WHERE DeFecha<=? AND (Year(AFecha)=0 OR AFecha>=?) ) t6
> ON ReservaAmarre=Amarres.Codigo
> ENDTEXT
>
> IF !Empty( ::oDeAmarre:Value )
> cWhere += " AND Amarres.Codigo >= '" + Trim( ::oDeAmarre:Value ) + "'"
> ENDIF
> cWhere += " AND Amarres.Codigo <= '" + Trim( ::oAAmarre:Value ) + "'"
>
> IF !Empty( ::oDeZona:Value )
> cWhere += " AND Amarres.Zona >= '" + Trim( ::oDeZona:Value ) + "'"
> ENDIF
> cWhere += " AND Amarres.Zona <= '" + Trim( ::oAZona:Value ) + "'"
>
> cSql += " WHERE " + Substr( cWhere, 6 ) + ;
> " ORDER BY Amarres.Zona,Amarres.Codigo"
>
> oData := oDB:QueryReport( oDB:BuildSqlSt( cSql, ::oFecha:Value,
> ::oFecha:Value, ::oFecha:Value ) )
>
>
> Está funcionando perfectamente tanto en SQLite como en MySQL, y no creo
> que se pueda decir que es una sentencia simple o sencilla. Y como puedes
> ver, sí­ hay sentencias anidadas.
>
> Envianos un ejemplo autocontenido que podamos ejecutar para comprobarlo.
>
Responder