TA表:(BeginName和EndName列为地名与公司名称混合的数据)
OFID BeginName EndName
============================
D3424 公司A 北京市
D8620 公司B 天津市
E3489 青岛市 北京市
F7396 宣化县 公司C
H2347 邯郸市 武汉市
R7289 张家口市 公司CTB表:
IncID IncName Place
=========================
1 公司A 宣化县
2 公司B 青岛市
3 公司C 北京市TC表:
Code Province City PlaceName
=============================================
1 北京市 北京市 北京市
2 河北省 张家口市 宣化县
3 山东省 青岛市 青岛市
4 河北省 张家口市 张家口市
5 河北省 邯郸市 邯郸市想要一个存储过程(注意效率)
CREATE PROCEDURE ShowList
@BeginName varchar(30) --起点城市
@EndName varchar(30) --终点城市
AS执行结果如下:
1、ShowList '张家口市','北京市'
OFID BeginName EndName
============================
D3424 公司A 北京市
F7396 宣化县 公司C
R7289 张家口市 公司C
OFID BeginName EndName
============================
D3424 公司A 北京市
D8620 公司B 天津市
E3489 青岛市 北京市
F7396 宣化县 公司C
H2347 邯郸市 武汉市
R7289 张家口市 公司CTB表:
IncID IncName Place
=========================
1 公司A 宣化县
2 公司B 青岛市
3 公司C 北京市TC表:
Code Province City PlaceName
=============================================
1 北京市 北京市 北京市
2 河北省 张家口市 宣化县
3 山东省 青岛市 青岛市
4 河北省 张家口市 张家口市
5 河北省 邯郸市 邯郸市想要一个存储过程(注意效率)
CREATE PROCEDURE ShowList
@BeginName varchar(30) --起点城市
@EndName varchar(30) --终点城市
AS执行结果如下:
1、ShowList '张家口市','北京市'
OFID BeginName EndName
============================
D3424 公司A 北京市
F7396 宣化县 公司C
R7289 张家口市 公司C
解决方案 »
- 利用trigger如何获得正在刚刚被更新,插入或者删除的记录
- 求助sql语句 关于uniqueidentifier类型
- 请问关于不同数据库中的表用innerjoin的问题
- [讨论]SQL Server 2000导出数据时一个奇怪的问题
- 在sql语句中如何对ntext类型的字段进行替换字符串等操作?
- sqlServer 的存储过程. 自动生成 excel 文件
- 插入问题.
- 写文档时,数据库的表结构编写的好方法,顺便问个问题
- 关于数据库统计的问题 ( @ANum= @ANum+字段1+字段2 ) ????????
- 请教SQL数据库同步备份有什么解决方法?
- 关于数据库安装时遇到的问题。
- 金碟ERP制作报表一个问题搞得我头轰了二天了`求救!
-- -----------t_mac 小编-------------------
--------------------希望有天成为大虾----
-- =========================================IF OBJECT_ID('TA') IS NOT NULL
DROP TABLE tA
GO
CREATE TABLE tA( OFID varchar(10),BeginName varchar(10) ,EndName varchar(10))
go
insert tA SELECT
'D3424','公司A','北京市' UNION ALL SELECT
'D8620','公司B','天津市' UNION ALL SELECT
'E3489','青岛市','北京市' UNION ALL SELECT
'F7396','宣化县','公司C' UNION ALL SELECT
'H2347','邯郸市','武汉市' UNION ALL SELECT
'R7289','张家口市','公司C'
GO
IF OBJECT_ID('TB') IS NOT NULL
DROP TABLE tB
GO
CREATE TABLE tB( IncID INT ,IncName varchar(10) ,Place varchar(10))
go
insert tB SELECT
1,'公司A','宣化县' UNION ALL SELECT
2,'公司B','青岛市' UNION ALL SELECT
3,'公司C','北京市'
GO
IF OBJECT_ID('TC') IS NOT NULL
DROP TABLE tC
GO
CREATE TABLE tC( Code INT ,Province varchar(10) ,City varchar(10),PlaceName varchar(10))
go
insert tC SELECT
1,'北京市','北京市','北京市' UNION ALL SELECT
2,'河北省','张家口市','宣化县' UNION ALL SELECT
3,'山东省','青岛市','青岛市'UNION ALL SELECT
4,'河北省','张家口市','张家口市' UNION ALL SELECT
5,'河北省','邯郸市','邯郸市'
GO
create PROCEDURE ShowList
@BeginName varchar(30), --起点城市
@EndName varchar(30) --终点城市
AS
begin
select *
from ta
where BeginName=@BeginName or
BeginName in(select PlaceName
from TB join tc ON TB.Place=tc.PlaceName
where City=@BeginName)
or ((EndName=@EndName or
EndName in(select PlaceName
from TB join tc ON TB.Place=tc.PlaceName
where City=@endName)) and BeginName like '%公司%' )end
goexec ShowList '张家口市','北京市'
/*
OFID BeginName EndName
============================
D3424 公司A 北京市
F7396 宣化县 公司C
R7289 张家口市 公司C*/
@BeginName varchar(30), --起点城市
@EndName varchar(30) --终点城市
AS
begin
select *
from ta
where (BeginName=@BeginName or
BeginName in(select PlaceName
from TB join tc ON TB.Place=tc.PlaceName
where City=@BeginName) and EndName like '%公司%' )
or ((EndName=@EndName or
EndName in(select PlaceName
from TB join tc ON TB.Place=tc.PlaceName
where City=@endName)) and BeginName like '%公司%' )end
goexec ShowList '张家口市','北京市'
我基本也是这个思路,总感觉执行效率很低,如果TA表数据量越来越大,效率会更低,我也考虑过表结构问题,TA表也只能这样设计,除非为了效率,再加一个表,把“公司名称”的在数据录入时即转换为地名,帮忙再想想办法