表结构如下,查询出来的数据有问题,烦请高人指导。num_category 表结构(numberseg是主键)
num_category_id ,numberseg
1016, 1356666101
1016, 1356667num_distinct表结构(numberseg是主键)
numberseg,distinct_id
1356666, 00290029
13566661, 00280028按最大匹配,1356666101号段归属于00280028地区,可是在用下面的sql查询时,却将1356666101归属于00290029了,用下面这条sql查询时有问题,
select distinct t1.num_category_id, t1.numberseg from
(
select num_category_id, numberseg from num_category where num_category_id=1016)t1,
(select tnd.numberseg from num_distinct tnd.distinct_id = '00290029') t2
where
t2.numberseg = substr(t1.numberseg,0,length(t2.numberseg))
查出的结果如下,本应该是查不出来的。num_category_id,numberseg
1016, 1356666101用的数据库是oracle,望达人指导。在此先谢!
num_category_id ,numberseg
1016, 1356666101
1016, 1356667num_distinct表结构(numberseg是主键)
numberseg,distinct_id
1356666, 00290029
13566661, 00280028按最大匹配,1356666101号段归属于00280028地区,可是在用下面的sql查询时,却将1356666101归属于00290029了,用下面这条sql查询时有问题,
select distinct t1.num_category_id, t1.numberseg from
(
select num_category_id, numberseg from num_category where num_category_id=1016)t1,
(select tnd.numberseg from num_distinct tnd.distinct_id = '00290029') t2
where
t2.numberseg = substr(t1.numberseg,0,length(t2.numberseg))
查出的结果如下,本应该是查不出来的。num_category_id,numberseg
1016, 1356666101用的数据库是oracle,望达人指导。在此先谢!
t2.numberseg = substr(t1.numberseg,0,length(t2.numberseg))
具体原因参考下面的SQL结果比较:
SQL> select distinct
2 t1.num_category_id,
3 t1.numberseg,
4 substr(t1.numberseg, 0, length(t2.numberseg)),
5 t2.numberseg
6 from (select num_category_id, numberseg
7 from (
8 select 1016 as num_category_id,1356666101 as numberseg from dual
9 union all
10 select 1016 as num_category_id,1356667 as numberseg from dual
11 )num_category
12 where num_category_id = 1016
13 ) t1,
14 (select numberseg
15 from (
16 select 1356666 as numberseg,'00290029' as distinct_id from dual
17 union all
18 select 13566661 as numberseg,'00280028' as distinct_id from dual
19 )num_distinct
20 where distinct_id = '00280028'
21 ) t2
22 where t2.numberseg = substr(t1.numberseg, 0, length(t2.numberseg));NUM_CATEGORY_ID NUMBERSEG SUBSTR(T1.NUMBERSEG,0,LENGTH(T NUMBERSEG
--------------- ---------- -------------------------------------------------------------------------------- ----------
1016 1356666101 13566661 13566661SQL>
SQL> select distinct
2 t1.num_category_id,
3 t1.numberseg,
4 substr(t1.numberseg, 0, length(t2.numberseg)),
5 t2.numberseg
6 from (select num_category_id, numberseg
7 from (
8 select 1016 as num_category_id,1356666101 as numberseg from dual
9 union all
10 select 1016 as num_category_id,1356667 as numberseg from dual
11 )num_category
12 where num_category_id = 1016
13 ) t1,
14 (select numberseg
15 from (
16 select 1356666 as numberseg,'00290029' as distinct_id from dual
17 union all
18 select 13566661 as numberseg,'00280028' as distinct_id from dual
19 )num_distinct
20 where distinct_id = '00290029'
21 ) t2
22 where t2.numberseg = substr(t1.numberseg, 0, length(t2.numberseg));NUM_CATEGORY_ID NUMBERSEG SUBSTR(T1.NUMBERSEG,0,LENGTH(T NUMBERSEG
--------------- ---------- -------------------------------------------------------------------------------- ----------
1016 1356666101 1356666 1356666
SQL>
是from 后面少了个where。
应该是这个样子
select distinct t1.num_category_id, t1.numberseg from
(
select num_category_id, numberseg from num_category where num_category_id=1016)t1,
(select tnd.numberseg from num_distinct tnd where tnd.distinct_id = '00290029') t2
where
t2.numberseg = substr(t1.numberseg,0,length(t2.numberseg)) 不过问题还是没能解决,希望再指导下。谢谢
(
select num_category_id, numberseg from num_category where num_category_id=1016)t1,
(select tnd.numberseg from num_distinct tnd.distinct_id = '00290029') t2
where
t2.numberseg = substr(t1.numberseg,0,length(t2.numberseg))
t2.numberseg = substr(t1.numberseg,0,length(t2.numberseg)) 这个关联条件:substr(t1.numberseg,0,length(t2.numberseg)) 取的是t1.numberseg这个字段的第0位到length(t2.numberseg)这一位的结果,length(t2.numberseg) = 7 ,所以就可以关联上啊。