Subject | Re: [firebird-support] CTE with unknown input parameter |
---|---|
Author | Martijn Tonies |
Post date | 2012-05-22T12:25:52Z |
Hello Set,
Martijn Tonies
Upscene Productions
http://www.upscene.com
Download Database Workbench for Oracle, MS SQL Server, Sybase SQL
Anywhere, MySQL, InterBase, NexusDB and Firebird!
> Hi, I'm trying to use a CTE a bit differently from what I usually do, butWouldn't this be the value of Field2 then?
> am failing.
>
> WITH MyCTE AS
> (SELECT CAST(:FromMainTable AS VarChar(5)) FromMainTable, Field1
> FROM MySmallLookupTableSame here?
> WHERE Field2 = :FromMainTable
> UNION
> SELECT CAST(:FromMainTable AS VarChar(5)), Field1
> FROM MySmallLookupTableWith regards,
> WHERE Field2 = substring(:FromMainTable FROM 1 FOR 4))
> ...
>
> SELECT ...
> FROM MyMainAndLargerTable MT
> LEFT JOIN MyCTE CTE ON MT.Afield = CTE.FromMainTable
> LEFT JOIN MyCTE CTE2 ON MT.Anotherfield = CTE2.FromMainTable
> ...
>
> The problem with this is that upon prepare, DB Workbench (naturally?)
> wants me to supply a value for the parameter :FromMainTable, a value that
> will vary from row to row.
>
> Of course, I can easily get a single value using
>
> SELECT ...
> FROM MyCTE CTE
> WHERE Field2 = :FromMainTable
>
> but I'd prefer the entire result set to be returned within one query.
>
> (The actual query was 166 lines in Fb 1.5 and when I noticed I had to fix
> it (which would make it grow), I thought that I could take advantage of
> CTEs in Fb 2.5 to prevent it from increasing to 500 lines).
>
> Should it at all be possible to use CTEs in a way similar to this or would
> I have to either let my original query grow or use EXECUTE BLOCK?
Martijn Tonies
Upscene Productions
http://www.upscene.com
Download Database Workbench for Oracle, MS SQL Server, Sybase SQL
Anywhere, MySQL, InterBase, NexusDB and Firebird!