select min(name) from mytable where name like 'MYSTRING%'--mystring = '中国' OR .....
sorry!!!select id,name from mytable x where name like 'MYSTRING%' and not exists (select 'x' from mytable y where x.name != y.name and x.name like y.name || '%')it works but not good. let me think again.
i don't know what on earth u want,maybe the below is what u r desiring? 输入关键字“中国” 则 2,10号记录被筛选出 输入关键字“中国河北省” 则 2,5 被选出 输入关键字“中国河南省” 则 10,13 号记录被选出 输入关键字“中国河北省石家庄市” 则只应有2号记录被选出
大家好, 久违斑竹! 以下的语句还可以精简, 小弟实在没有时间了,select * from tab_test where rowid in (select min(rowid) from tri_test where name like '中国%') ;再会 。
用ROWID不行的,这在前面的贴子了讨论过。 而且 select * from tab_test where rowid in (select min(rowid) from tri_test where name like '中国%'); 肯定只能返回一条纪录
这样试试 select * from tab_test where rowid in (select min(rowid) from tri_test where name like '中国???'); 保证只有三个后接字符
大家好, 这个问题用rowid与union联用是可以解决的.谢谢斑竹提出的意见。 rowid,Union很强大请大家注意。1.Test SQL> select * from tri_test ; NAME NL ---------- ---------- l 1 lx 1 lixing 1 x 2 xg 2 xing 22.SQL select * from tri_test where rowid in (select rowid from tri_test where name like 'x%' --x是指子字符串 minus select rowid from tri_test where name = 'x') /3.resultNAME NL ---------- ---------- xg 2 xing 24.success
对于该问题,我分析了一下,这个问题的关键好像是要找出数据库中的三级地名,即把到具体到市一级的地名都检索出来,然后使用like检索就方便了。 挑出三级地名的方法如下:(我使用sqlserver的语句) 1。先选出三级以上的地名: select a.ID from t1 a,t1 b where a.name <> b.name and a.name like b.name + '%' 2。取反可得三级地名(考虑到速度,使用左连接): select c.* from t1 c left outer join (select a.ID from t1 a,t1 b where a.name <> b.name and a.name like b.name + '%') d on c.ID = d.ID where d.ID is null 3。最后检索符合条件的三级地名: select c.* from t1 c left outer join (select a.ID from t1 a,t1 b where a.name <> b.name and a.name like b.name + '%') d on c.ID = d.ID where d.ID is null and c.name like '中国%'这个问题如果数据库设计得好,不用这么复杂,不过拿来作为技术讨论,还挺有意思的。
from mytable
where name like 'MYSTRING%'--mystring = '中国' OR .....
from mytable x
where name like 'MYSTRING%'
and not exists (select 'x'
from mytable y
where x.name != y.name
and x.name like y.name || '%')it works but not good. let me think again.
输入关键字“中国河北省” 则 2,5 被选出
输入关键字“中国河南省” 则 10,13 号记录被选出
输入关键字“中国河北省石家庄市” 则只应有2号记录被选出
怎麼你這個名字很熟?這倒也是.
帖主的要求太智能化了.
你在这边气氛会活跃很多的!上次你说的“原来是赔本生意”一句话让我乐了老半天。希望以后能经常听到这样点睛之笔!至于我写的那段代码,我做了一遍完整的试验,结果一点都没有错。你有兴趣的话我把脚本发给你测试一下。
以下的语句还可以精简, 小弟实在没有时间了,select * from tab_test where rowid in (select min(rowid) from tri_test where name like '中国%') ;再会 。
而且
select * from tab_test where rowid in (select min(rowid) from tri_test where name like '中国%');
肯定只能返回一条纪录
select * from tab_test where rowid in (select min(rowid) from tri_test where name like '中国???');
保证只有三个后接字符
rowid,Union很强大请大家注意。1.Test
SQL> select * from tri_test ;
NAME NL
---------- ----------
l 1
lx 1
lixing 1
x 2
xg 2
xing 22.SQL
select * from tri_test where rowid in
(select rowid from tri_test where name like 'x%' --x是指子字符串
minus
select rowid from tri_test where name = 'x')
/3.resultNAME NL
---------- ----------
xg 2
xing 24.success
挑出三级地名的方法如下:(我使用sqlserver的语句)
1。先选出三级以上的地名:
select a.ID from t1 a,t1 b where a.name <> b.name and a.name like b.name + '%'
2。取反可得三级地名(考虑到速度,使用左连接):
select c.* from t1 c left outer join (select a.ID from t1 a,t1 b where a.name <> b.name and a.name like b.name + '%') d on c.ID = d.ID where d.ID is null
3。最后检索符合条件的三级地名:
select c.* from t1 c left outer join (select a.ID from t1 a,t1 b where a.name <> b.name and a.name like b.name + '%') d on c.ID = d.ID where d.ID is null and c.name like '中国%'这个问题如果数据库设计得好,不用这么复杂,不过拿来作为技术讨论,还挺有意思的。