Subject | Re: [firebird-support] Doubts about exists predicate |
---|---|
Author | Мирослав |
Post date | 2010-11-16T11:38:33Z |
You can use GLOBAL TEMPORARY TABLE .... ON COMMIT DELETE ROWS and
insert the constants in this table before the actual SELECT query. After
that you can use something like
Select Field1, Field2 from Table1inner join tmp_table where
table1.Field3 = tmp_table.field1
But this requires to do inserts into the database. And if the SELECT
query is executed several times in one transaction with different
values, you must manually delete all record in the temporary table
before the new inserts.
На 16.11.2010 12:06, Tanmoy Ghoshal написа:
insert the constants in this table before the actual SELECT query. After
that you can use something like
Select Field1, Field2 from Table1inner join tmp_table where
table1.Field3 = tmp_table.field1
But this requires to do inserts into the database. And if the SELECT
query is executed several times in one transaction with different
values, you must manually delete all record in the temporary table
before the new inserts.
На 16.11.2010 12:06, Tanmoy Ghoshal написа:
>
> Hi SET,
>
> I have these constant values not in a table but in front end, from
> there I am
> gathering these constant values and would like to include in the sql,
> but at the
> same time I do not want to post to the table, now since the constant
> values are
> available, how to use them in the sql, that is my problem, coz these
> constants
> may be greater than 1500.
>
> So according to me could you pl give me an example.
>
> Thank You.
>
> Tanmoy
>
> ________________________________
> From: Svein Erling Tysvær <svein.erling.tysvaer@...
> <mailto:svein.erling.tysvaer%40kreftregisteret.no>>
> To: "firebird-support@yahoogroups.com
> <mailto:firebird-support%40yahoogroups.com>"
> <firebird-support@yahoogroups.com
> <mailto:firebird-support%40yahoogroups.com>>
> Sent: Tue, 16 November, 2010 3:23:03 PM
> Subject: RE: [firebird-support] Doubts about exists predicate
>
> Hi Tanmoy!
>
> Put the values in a table (it might be a normal or a temporary table,
> you know
> best which will be suitable), and then use the EXISTS with subselect
> that I
> wrote below. EXISTS are normally quick, though, of course, Field3 must be
> indexed in your (temporary) table.
>
> HTH,
> Set
>
> -----Original Message-----
> From: firebird-support@yahoogroups.com
> <mailto:firebird-support%40yahoogroups.com>
> [mailto:firebird-support@yahoogroups.com
> <mailto:firebird-support%40yahoogroups.com>]
> On Behalf Of Tanmoy Ghoshal
> Sent: 16. november 2010 10:44
> To: firebird-support@yahoogroups.com
> <mailto:firebird-support%40yahoogroups.com>
> Subject: Re: [firebird-support] Doubts about exists predicate
>
> Hi Set,
>
> Thank you for reply.
>
> I have more than 1500 constant values. Here IN not accept more than
> 1500, then
> what is the best way to write SQL to get data in less time.
>
> I need to write SQL which should not take much time to execute.
>
> As a beginner, If possible Please help me.
>
> Thanks once again.
>
> Tanmoy.
>
> ________________________________
> Set wrote:
>
> IN is good when using constants, EXISTS when involving a subselect.
> I.e. I would
>
> use
>
> Select Field1, Field2 from Table1 where Field3 IN ('Value1', 'Value2',
> 'Value3');
>
> whereas I would replace
>
> Select t1.Field1, t1.Field2 from Table1 t1 where t1.Field3 IN (select
> t2.Field3
> from Table2 T2);
>
> with
>
> Select t1.Field1, t1.Field2 from Table1 t1 where exists(select * from
> Table2 T2
> where t1.Field3 = t2.Field3);
>
> To be precise (normally it is not a practical issue, it is only
> relevant when
> dealing with NULL), IN (<subselect>) can always be replaced by EXISTS,
> whereas
> NOT IN (<subselect>) isn't always identical to NOT EXISTS.
>
> HTH,
> Set
>
> [Non-text portions of this message have been removed]
>
>