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.
>