drop table if exists t1; CREATE TABLE t1 ( a char(5) NOT NULL, b char(4) NOT NULL, KEY (a), KEY (b) ); INSERT INTO t1 VALUES ('A','B'),('b','A'),('C','c'),('D','E'),('a','a'); INSERT INTO t1 VALUES ('AA','BB'),('bb','AA'),('CC','cc'),('DD','EE'),('aa','aa'); INSERT INTO t1 VALUES ('AAA','BBB'),('bbb','AAA'),('CCC','ccc'),('DDD','EEE'),('aaa','aaa'); select * from t1,t1 as t2 where length(t1.A)=1 and length(t2.B)=1 ; a b a b A B A B b A A B C c A B D E A B a a A B A B b A b A b A C c b A D E b A a a b A A B C c b A C c C c C c D E C c a a C c A B D E b A D E C c D E D E D E a a D E A B a a b A a a C c a a D E a a a a a a explain select t1.*,t2.* from t1,t1 as t2 where t1.A=t2.B and length(t1.A)=1 and length(t2.B)=1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL a NULL NULL NULL 15 Using where 1 SIMPLE t2 ref b b 4 test.t1.a 1 Using where select t1.*,t2.* from t1,t1 as t2 where t1.A=t2.B and length(t1.A)=1 and length(t2.B)=1 order by binary t1.a,t2.a; a b a b A B a a A B b A C c C c a a a a a a b A b A A B select * from t1 where a='a'; a b A B a a drop table t1;