there are no matching table names for (s2) in optimizer hint /*+ INL_HASH_JOIN(s1, s2) */. Maybe you can use the table alias name
s2 匹配不到,其实s2是存在的
复现步骤如下:
create table s1(id int not null auto_increment primary key,a_date varchar(8),a_type varchar(8));
alter table s1 add index date_index(a_date);
create table s2(a_type varchar(8) primary key,a_flag varchar(1),a_s varchar(1));
insert into s1(a_date,a_type)values(‘20230421’,‘1000’);
insert into s1(a_date,a_type)values(‘20230422’,‘1001’);
insert into s1(a_date,a_type)values(‘20230421’,‘1002’);
insert into s1(a_date,a_type)values(‘20230422’,‘1003’);
insert into s1(a_date,a_type)values(‘20230421’,‘1004’);
insert into s1(a_date,a_type)values(‘20230420’,‘1004’);
insert into s2 values(‘1000’,‘1’,‘1’);
insert into s2 values(‘1001’,‘1’,‘2’);
insert into s2 values(‘1002’,‘1’,‘2’);
insert into s2 values(‘1004’,‘1’,‘2’);
select /*+ INL_HASH_JOIN(s1, s2) */ * from s1 where a_date=‘20230421’ and a_type in (select a_type from s2 where a_flag=‘1’);
没亲测,但感觉是hint的查询块引用描述问题
你改成下面这样试下:
select /*+ INL_HASH_JOIN(@sel_1 s1, s3) */ * from s1 where a_date=‘20230421’ and a_type in (select a_type from s2 where a_flag=‘1’) s3;