Subject | Re: [firebird-support] Doubts about exists predicate |
---|---|
Author | Tanmoy Ghoshal |
Post date | 2010-11-16T10:06:01Z |
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@...>
To: "firebird-support@yahoogroups.com" <firebird-support@yahoogroups.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@yahoogroups.com]
On Behalf Of Tanmoy Ghoshal
Sent: 16. november 2010 10:44
To: firebird-support@yahoogroups.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]
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@...>
To: "firebird-support@yahoogroups.com" <firebird-support@yahoogroups.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@yahoogroups.com]
On Behalf Of Tanmoy Ghoshal
Sent: 16. november 2010 10:44
To: firebird-support@yahoogroups.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]