Thread: selecting recs based on a tmp tbl vals that are wildcarded ?
I have a temp table containg wildcarded strings and I want to select values froma different table using “like” against all those wildcarded values. Here’s the example...
create temporary table match_these (val varchar(32));
insert into match_these (val) values (‘jo%’);
insert into match_these (val) values (‘%denn_’);
insert into match_these (val) values (‘alt%’);
create table footable (name varchar(32));
(insert a bunch of records)
Now...
select * from footable where name in (select val from match_these)
... won’t work because “in” implies equality. I want something like...
select * from footable where name like (select val from match_these)
... but that doesn’t work because the subquery returns more than one row :-(
Any elegant sql solutions out there before I brute-force a solution ?
Thanks in Advance !
"Gauthier, Dave" <dave.gauthier@intel.com> writes: > select * from footable where name in (select val from match_these) > ... won't work because "in" implies equality. I want something like... > select * from footable where name like (select val from match_these) What you need is select * from footable where name ~~ any (select val from match_these) It would probably be clearer to write select * from footable where name like any (select val from match_these) but the ANY syntax requires an operator name, so you have to write the operator equivalent for LIKE. regards, tom lane
In article <482E80323A35A54498B8B70FF2B8798003E5AC7099@azsmsx504.amr.corp.intel.com>, "Gauthier, Dave" <dave.gauthier@intel.com> writes: > I have a temp table containg wildcarded strings and I want to select values > froma different table using ?like? against all those wildcarded values. Here?s > the example... > create temporary table match_these (val varchar(32)); > insert into match_these (val) values (?jo%?); > insert into match_these (val) values (?%denn_?); > insert into match_these (val) values (?alt%?); > create table footable (name varchar(32)); > (insert a bunch of records) > Now... > select * from footable where name in (select val from match_these) > ... won?t work because ?in? implies equality. I want something like... > select * from footable where name like (select val from match_these) Why don't you use a simple join? Something like SELECT f.name FROM footable f JOIN match_these m ON f.name ~~ m.val