求一条语句,三表查询(二个表会,三个表搞不定)

下雨天 2011-09-20 04:13:36

总表tb1
地址 体积 城市 车牌号 配送司机 送货人 配送日期
DOA-广东省广州市增城市历城街观园东路 0.642 增城 粤A51Y75 张三 A1 2011-9-8 14:31
东莞市莞城区中侨大厦B座5F03室 0.0854 东莞 粤A50Y42 李四 A2 2011-9-8 14:29
广东佛山广东省佛山市禅城区同华东一路7号佛山市荣山中学/吴小冬 0.537 佛山 粤A50Y42 李四 A2 2011-9-9 9:57
广东广州广州市东风中路509号1203房 / 刘礼坚 2 广州 粤A50Y08 李八 A3 1900-1-1 0:00
广东广州广州市荔湾区花地大道中坑口大街182号(四季花园) 1.071 广州 粤A50Y42 李四 A2 2011-9-9 9:57
广东广州广州市天河区科韵路22号4楼/ 吴国明 3.9748 广州 粤A50Y33 李七 A4 2011-9-8 10:26

区域基础表TB2
地址 配送区域
DOA-广东省广州市增城市历城街观园东路 增城市
东莞市莞城区中侨大厦B座5F03室 DDD
广东佛山广东省佛山市禅城区同华东一路7号佛山市荣山中学/吴小冬 白云区
广东广州广州市东风中路509号1203房 / 刘礼坚 荔湾区
广东广州广州市荔湾区花地大道中坑口大街182号(四季花园) 荔湾区
广东广州广州市天河区科韵路22号4楼/ 吴国明 天河区

费用基础表tb3
车牌号 配送区域 司机费用 送货人 点费
粤A51Y75 增城市 120 21
粤A50Y42 DDD 70 21 6
粤A50Y42 白云区 7 19 6
粤A50Y08 荔湾区 200 23
粤A50Y42 荔湾区 59 12 6
粤A50Y33 天河区 21 14
条件:1.根据总表的地址,带出区域基础表的配送区域
2.根据1条件得出的配送区域与总表的车牌号带出,司机费用,送货人,点费
最后结果
地址 体积 城市 车牌号 配送司机 送货人 配送区域 司机费用 送货人 点费 配送日期
DOA-广东省广州市增城市历城街观园东路 0.642 增城 粤A51Y75 张三 A1 增城市 120 21 2011-9-8 14:31
东莞市莞城区中侨大厦B座5F03室 0.0854 东莞 粤A50Y42 李四 A2 DDD 70 21 6 2011-9-8 14:29
广东佛山广东省佛山市禅城区同华东一路7号佛山市荣山中学/吴小冬 0.537 佛山 粤A50Y42 李四 A2 白云区 7 19 6 2011-9-9 9:57
广东广州广州市东风中路509号1203房 / 刘礼坚 2 广州 粤A50Y08 李八 A3 荔湾区 200 23 1900-1-1 0:00
广东广州广州市荔湾区花地大道中坑口大街182号(四季花园) 1.071 广州 粤A50Y42 李四 A2 荔湾区 59 12 6 2011-9-9 9:57
广东广州广州市天河区科韵路22号4楼/ 吴国明 3.9748 广州 粤A50Y33 李七 A4 天河区 21 14 2011-9-8 10:26

...全文
917 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
posuzon 2012-04-11
  • 打赏
  • 举报
回复
应该注意你的表外联查询 应该选择为什么样的外联 left?right?..
零零妖 2011-09-24
  • 打赏
  • 举报
回复
内连接就可以搞定嘛
品茶 2011-09-23
  • 打赏
  • 举报
回复
不要这样写
数据多了会join到死的

还容易产生注入点被注入
zhaobinwc 2011-09-22
  • 打赏
  • 举报
回复
就是关联表的查询 比较简单啊!
blueared4 2011-09-21
  • 打赏
  • 举报
回复
select t1.车牌号,t2.配送区域,... from t1
left join t2 on t1.地址 = t2.地址
left join t3 on t1.车牌号 = t3.车牌号;

脑子里想的,你试试这个行不。。。
sdau20072000 2011-09-21
  • 打赏
  • 举报
回复
三表联查和两表联查是一样的道理,只是where里面多一句话而已
renwenli07461 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qianjin036a 的回复:]
SQL code
select a.地址,a.体积,a.城市,a.车牌号,a.配送司机,a.送货人,b.配送区域,c.司机费用,c.送货人,c.点费,b.配送日期
from tb1 a inner join tb2 b on a.地址=b.地址 inner join tb3 c on c.配送区域=b.配送区域
[/Quote]

用join就可以查出表,多少个表都可以
-晴天 2011-09-21
  • 打赏
  • 举报
回复
加一条件:
select a.地址,a.体积,a.城市,a.车牌号,a.配送司机,a.送货人,b.配送区域,c.司机费用,c.送货人,c.点费,b.配送日期
from tb1 a inner join tb2 b on a.地址=b.地址 inner join tb3 c on c.配送区域=b.配送区域
where a.车牌号=C.车牌号


连接查询,所得记录总数并不一定要小于主表的记录数.

比如,主表为班级,从表为学生
select a.班级名,b.学生名 from 班级 a inner join 学生 b on a.id=b.bjid

只要符合联结条件的记录都会被查出来,显然,要比班级表记录多得多了.
净灵 2011-09-21
  • 打赏
  • 举报
回复
把检索出来的新表与第三张表再进行select 就一样的嘛
铁匠梁 2011-09-20
  • 打赏
  • 举报
回复
格式太乱,应该是表格形式,或者贴图。易用性不好
bitls 2011-09-20
  • 打赏
  • 举报
回复
仔细看了一下你的代码,代码应该没有问题,请检查
1.总表有重复记录,先进行处理
2.区域明细表是不是全部有总表地址对应的记录
3.费用基础表是不是有总表及区域表所对应的记录
如果全部数据也有对上了,请一一核对一下...

如果问题解决请结贴!
work_fei 2011-09-20
  • 打赏
  • 举报
回复
使用left join就不会有重复的记录了
中国风 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 calm_life 的回复:]

SQL code

select * from Orders a where a.Peisongdate is not null and a.Peisongsj<>'渠道'--
--(112 行受影响)


select a.*,b.*,c.* from Orders a
inner join addess_GZ as b on a.ShouhuoAddress=b.addess
inner ……
[/Quote]

--加上 车牌号
select a.*,b.*,c.* from Orders a
inner join addess_GZ as b on a.ShouhuoAddress=b.addess
inner join percentage as c on b.addess_area=c.区域
where a.Peisongdate is not null and a.Peisongsj<>'渠道' and a.Peisongchel=c.车牌号
and a.[车牌号]=c.[车牌号]
CalvinR 2011-09-20
  • 打赏
  • 举报
回复
楼主能把要求全部详详细细的王完整整的贴出来吗???
下雨天 2011-09-20
  • 打赏
  • 举报
回复

select * from Orders a where a.Peisongdate is not null and a.Peisongsj<>'渠道'--
--(112 行受影响)


select a.*,b.*,c.* from Orders a
inner join addess_GZ as b on a.ShouhuoAddress=b.addess
inner join percentage as c on b.addess_area=c.区域
where a.Peisongdate is not null and a.Peisongsj<>'渠道' and a.Peisongchel=c.车牌号
--(231 行受影响)


中国风 2011-09-20
  • 打赏
  • 举报
回复
select 
a.地址,
a.体积,
a.城市,
a.车牌号,
a.配送司机,
a.送货人,
b.配送区域,
c.司机费用,
c.送货人,
c.点费 ,
a.配送日期

from T1 as a
inner join T2 as b on a.[地址]=b.[地址]
inner join T3 as c on c.[配送区域]=b.[配送区域] AND a.[车牌号]=c.[车牌号]



在T3表 on后面加條件,也可直接
where a.[车牌号]=c.[车牌号]
jiaoxuekun 2011-09-20
  • 打赏
  • 举报
回复
学习中,好多高手啊。
chuanzhang5687 2011-09-20
  • 打赏
  • 举报
回复
如果是整行有重复记录的话
可以用 distinct来消除重复
chuanzhang5687 2011-09-20
  • 打赏
  • 举报
回复
如果A表中的地址对应B表中的地址是一对多的关系
那么数据A中肯定有重复[Quote=引用 17 楼 calm_life 的回复:]
另外A还有重复的记录
[/Quote]
chuanzhang5687 2011-09-20
  • 打赏
  • 举报
回复
select a.*,b.*,c.* from Orders a
inner join addess_GZ b a.ShouhuoAddress=b.addess
inner join percentage c b.addess_area=c.区域
where a.车牌号=c.车牌号

加载更多回复(18)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧