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
--
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.
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
-
- Mensajes: 420
- Registrado: Sab Ago 16, 2008 9:06 pm
-
- Mensajes: 420
- Registrado: Sab Ago 16, 2008 9:06 pm
Probema SQLIte con SELECT anidadas
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
>

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
>
-
- Mensajes: 420
- Registrado: Sab Ago 16, 2008 9:06 pm
Probema SQLIte con SELECT anidadas
¿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
>
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
>
Probema SQLIte con SELECT anidadas
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
> 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
-
- Mensajes: 420
- Registrado: Sab Ago 16, 2008 9:06 pm
Probema SQLIte con SELECT anidadas
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.
>
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.
>
-
- Mensajes: 420
- Registrado: Sab Ago 16, 2008 9:06 pm
Probema SQLIte con SELECT anidadas
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.
>
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.
>