您的位置:程序门 -> vb -> 基础类



这个sql怎么表达?其实就是二个如何相关连!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


这个sql怎么表达?其实就是二个如何相关连![已结贴,结贴人:qw2008]
发表于:2007-07-30 13:03:35 楼主
这个sql怎么表达?其实就是二个如何相关连!

有如下二表:
不知道什么原因,这个变态的数据库的结构很怪,而且他是借用了金蝶的结构.
表1:
fitemid fnumber   fname   fitemclassid   fparentid       fisdetail       fdepth
293 01               安徽省     1           0           0         1
308 02             北京市     1           0           0                   1
309 03           福建省     1                       0           0                   1
335 01.01003 宿州牧圣饲料经营部       1                         293                         1                 2
336 01.01004 霍邱刘勇饲料添加剂经营部       1                         293                         1                 2
337 01.01005 怀远牧康兽药总汇       1                         293                           1             2
338 01.01006 合肥永安兽药经营部       1                         293                         1                 2
339 01.01007 阜阳九龙饲料添加剂厂       1                         293                           1                 2
340 01.01008 滁州赵德会                       1                         293                         1                 2
表2:
fitemid   fnumber fname
352 02.02004 北京顺义区张镇兽医站
367 03.03008 升荣牧场
395 03.03036 南安官桥镇畜牧兽医咨询部
420 04.27252 中山市翠辉农场
442 05.05022 广东省汕头市动物防疫监督所
453 06.06009 遵义红花岗清书兽药经营部
461 08.08005 石家庄农科院兽药经营部
483 10.10004 哈尔滨双赢
497 12.12009 湖南永州市零陵民望兽药商行
522 12.12034 衡阳衡南县周永德
547 13.13009 长春东南饲料有限责任公司
569 14.14021 阜宁希望饲料有限公司
570 14.14022 阜宁李文静
579 14.14031 便仓袁根华
591 15.15007 江西新余市渝水区罗坊镇李贱根
594 15.15010 江西省上高县聂木林
597 15.15013 江西南昌罗家集为民兽药店
我现在的要做的是如下按省区进行筛选的一张表:
省区           客户代码     客户名称     ...

其中的关系,省区和客户间的是通过表1fitemid字段进行相关的!谢谢!
发表于:2007-07-30 13:34:401楼 得分:0
表2信息不足   无法配对表一   地区部分
发表于:2007-07-30 14:17:282楼 得分:5
select   b.fname,a.fnumber,a.fname
from   table2   a  
left   join   (select   *   from   table1   where   fparentid=0)   b   on   a.fitemid=b.fitemid
发表于:2007-07-30 15:03:323楼 得分:0
按2楼网友的sql,查询出来的b.fname是null值,不知道那儿不对?
发表于:2007-07-30 19:44:484楼 得分:0
你结构中的fitemid   fnumber   fname   3个字段不清楚!b.fname为null的原因是表2和表1根本不是按fitemid进行关联,你可以查一查表2中和表1中的fitemid字段是有相同的信息吗?
发表于:2007-07-30 22:33:115楼 得分:15
我怎么觉得表2   在某种程度上面是表1的子表阿

你看到parentid这个字段了么,这个就是找到省了。省/直辖市一级的parentid=0,其他的parentid有值

除非你你用substring来对比,比前三个字符  
select   b.fname,a.fnumber,a.fname
from   table2   a
left   join   (select   *   from   table1   where   fparentid=0)   b  
convert(varchar,a.fitemid,10)=substring(convter(varchar,b.fitemid,10),1,3)
发表于:2007-07-31 08:39:286楼 得分:0
表1的格式应该是这样的,
fitemid       fnumber       fname           fitemclassid   fparentid       fisdetail       fdepth
293                 01               安徽省               1                                 0                         0               1
308                 02               北京市               1                                 0                         0               1
309                 03               福建省               1                                 0                         0               1
335               01.01003     宿州牧圣饲料经营部       1                 293                     1               2
336               01.01004     霍邱刘勇饲料添加剂经营部       1     293                     1               2
337               01.01005     怀远牧康兽药总汇       1                     293                     1               2
338               01.01006     合肥永安兽药经营部       1                 293                     1               2
339               01.01007     阜阳九龙饲料添加剂厂       1             293                     1               2
340               01.01008     滁州赵德会                       1                 293                     1               2
但是以上的也不妨碍我们理解这张表。
按clear_zero(clear_zero)兄的理解是对的,这张表确实有点变态,表2确实是表1的子表,在表1中还有包括业务员,存货,部门等等日常档案都在这张表内,按2楼的tqqonline(蜡烛)   的sql表达式,除了省区查询的结果是null值外,我又咨询了另一位网友,他的表达式是这样的:
select   c.fname,   a.fname,a.fnumber,a.faddress,a.flinker,a.fphone,a.ffax   from  

tblorganization   a   inner   join   tblitem   b   on   a.fnumber=b.fnumber   inner   join   tblitem   c  

on   b.fitemclassid=c.fitemclassid
按他的查询到是可以查询出包括省区,业务员,等等,可是有一个问题,有二个条件我不知道该加到那儿去?就是省区必须是fitemclassid=1   and   fparentid=0,大家帮我看看该如何加?
谢谢!
发表于:2007-07-31 09:31:097楼 得分:0
郁闷,看不懂~~~
发表于:2007-07-31 17:00:478楼 得分:0
加最后面~
或者加到表内联相关信息(a.fnumber=b.fnumber   )后面~
发表于:2007-07-31 17:26:279楼 得分:0
你的第二次罗列你表一的内容就清楚了许多。第一次产生很多歧义。

从你第二次列表的情况来看,你table2的主帖描述也是错误的

你的主帖
表2:
fitemid   fnumberfname
35202.02004北京顺义区张镇兽医站
36703.03008升荣牧场
39503.03036南安官桥镇畜牧兽医咨询部

实际我推测
表2:
fitemid   fnumber               fname
352           02.02004             北京顺义区张镇兽医站
367           03.03008             升荣牧场
395           03.03036             南安官桥镇畜牧兽医咨询部

这样看起来数据库的结构设置就符合逻辑了,你查询不到结果应该是你写的问题而不是数据库设计本身
然后从你的数据来分析,你的问题
"就是省区必须是fitemclassid=1   and   fparentid=0,大家帮我看看该如何加? "

数据显示你的省份fitemclassid都是1而fparentid都是0
比如
fitemid   fnumber   fname       fitemclassid   fparentid  
293           01             安徽省       1                       0                    
......

那么你的那个条件加和不加效果都是一样的

最后说一条,当你描述一个问题时候麻烦不要偷懒,该打的空格打出来,数据和列名对齐

发表于:2007-07-31 17:28:1110楼 得分:0
fitemid   fnumber       fname
352           02.02004     北京顺义区张镇兽医站
367           03.03008     升荣牧场
395           03.03036     南安官桥镇畜牧兽医咨询部
发表于:2007-07-31 17:51:0011楼 得分:0
clear_zero(clear_zero)   你的理解是对的,但是在数据表里有其他的档案也在该表里,如业务员的,存货的等等,所以有加c.fitemclassid=1   and   c.fparentid=0但是我按如下语句查询时出现的却是另一番光景:
select   c.fname,   a.fname,a.fnumber,a.faddress,a.flinker,a.fphone,a.ffax   from  

tblorganization   a   inner   join   tblitem   b   on   a.fnumber=b.fnumber   inner   join   tblitem   c  

on   b.fitemclassid=c.fitemclassid   and   c.fitemclassid=1   and   c.fparentid=0


查询结果:
福建省     北京顺义区张镇兽站                   02.02004
福建省     升荣牧场                                       03.03008     漳州柯志群
福建省     南安官桥镇畜牧兽医咨询部       03.03036     南安市官桥镇西街45号   吴金钱
福建省     中山市翠辉农场                           04.27252
福建省     广东省汕头市动物防疫监督所   05.05022
福建省     遵义红花岗清书兽药经营部       06.06009       遵义王思明
福建省     石家庄农科院兽药经营部           08.08005       石家庄刘福晨
福建省     哈尔滨双赢                                   10.10004         哈尔滨徐春燕
浙江省     北京顺义区张镇兽站                   02.02004
浙江省       升荣牧场                                       03.03008       漳州柯志群
浙江省     南安官桥镇畜牧兽医咨询部       03.03036       南安市官桥镇西街45号   吴金钱
浙江省       中山市翠辉农场                           04.27252
浙江省       广东省汕头市动物防疫监督所   05.05022
浙江省       遵义红花岗清书兽药经营部       06.06009         遵义王思明
浙江省       石家庄农科院兽药经营部           08.08005         石家庄刘福晨
浙江省       哈尔滨双赢                                   10.10004         哈尔滨徐春燕
诸如此类,也就是有多少省,多少个客户,就有他们之间的乘积,所以这个查询结果还是不对的,应该在那儿还得消除重复的问题!
发表于:2007-07-31 18:13:4912楼 得分:0
没回答前我说一句,这个真的不是变态的数据库设计
子表很可能是作为特殊需要存在的。

你出现重复是因为你的join   没有写好,我来试验写一个,你给我反馈

select   a.fname   as   provincename,b.fname   as   companyname,,b.faddress,b.flinker,b.fphone
from   (select   fname,faddress,flinker,fphone,fparentid     from   tab1   inner   join   tab2   on  
tab1.fnumber=tab2.fnumber)   b   inner   join   tab1   a   on   b.fname=a.fname



快速检索

最新资讯
热门点击