Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.tools -> Re: SQL Question
Lisa M. Lewis wrote:
>
> Hi all,
>
> I am trying to do something like:
>
> insert into temptable
> select userid
> from visits v, locations l
> where v.locationid = l.locationid
> and l.location like 'location1%'
>
> But instead of specifying a literal such as 'location1%', I would like
> to compare l.location to values held in a table. The key is I would
> still like to get the same results as a 'like' comparison would
> provide. This is what I did:
>
> insert into temptable
> select v.userid
> from visits v, location l, comparetable ct
> where v.location = l.location
> and SUBSTR(l.location,0,LENGTH( ct.location ) ) = ct.location;
The "0" in the substring should be "1".
> Can anyone tell me if there is a more efficient way of doing this either
> in SQL or PL/SQL?
Alternative:
insert into temptable
select v.userid
from visits v, location l, comparetable ct
where v.location = l.location
and l.location like ct.location
And load your comparetable with locations that you want to search for in the "like" format, i.e.
comparetable.location
Since the like is acting as a join between your location table and the comparetable, you need to be careful that you don't place anything in the comparetable which would cause two hits for the same row on the location table:
Example:
location.location
All these rows yeild two hits in the join to the comparetable, so they would generate two rows for your insert. The third one is deceptive - it yields a hit for location1% and location132%
![]() |
![]() |