作者evantw (安安小成)
看板Database
标题Re: [SQL ] 请问多个相似 Table 串联查询如何写??
时间Sun Apr 17 16:19:24 2011
我这样说明好了
A Table 是存放基本资料
所以当 使用者输入一个搜寻条件後 (ex:工号)
在 Form 的 A DataGrid 内因该只有一笔
(基本资料同一工号是不会资料有重复的情况)
但 B、C、D 分别是 加班 补修 绩效资料
(同一个工号会有多笔纪录的可能)
所以会有可能 B、C、D 的 DataGrid 内有多笔或没有的资料
我用 select 语法
select a*,b.B栏位,c.C栏位,d.D栏位
from ((a left join b on a.栏位Key=b.栏位Key)left join
c on a.栏位Key=c.栏位Key) left join d on a.栏位Key=d.栏位Key
where a.栏位Key like '工号';
假设使用者输入的工号是 001,002,003,004 时资料跑出来的型态是
栏位key A栏位 B栏位 C栏位 D栏位
001 1 AAA AAA
001 1 ABC ACC
001 1 ACC
002 2 BBB BBB DDD
002 2 BBA BBA DDD
003 3 CCC CCC CCC
004 4 DDD
因为 B、C、D 同一个工号的人会有存在多笔的关系
导致 A Table 栏位的同一个工号基本资料也会有重复显示很多行
我想请问的就是如果像这样型态的资料
我要把资料依序丢到 Form 上的 A、B、C、D DataGrid 内
A DataGrid 只需显示 001,002,003,004 各基本资料(因该各只有一笔)
B、C、D DataGrid 需显示 001,002,003,004 的资料(可能会有很多笔)
如果像 C栏位 001 第三笔的是空白的就跳过!!
D栏位 001 和 004 都没有纪录就不显示出来!!
请问要怎麽分类??
是透过 select 做分类??
还是要从 Form 上的程式下手呢??
希望这样讲解各位能够明白我所要表达的 =.="
谢谢~~
※ 引述《Piceman (派斯面)》之铭言:
: 我最近在摸php
: 所以我用简略的php语法解释
: 不过流程应该是类似就是了
: $sql='select a.xx,b.yy,c.zz from xxx';
: $record=sql_query($sql);
: $tableA['col1']=$record['a.xx'];
: $tableB['col1']=$record['b.yy'];
: 虽然在asp.net中
: datagrid透过assign datasource可以对result filter
: 或者说安排特定栏位接收查询结果中指定栏位资料
: 不过那只是上面方法的图形介面而已
: 做的事情其实是差不多的
: 然後,下次要问的时候问题尽量明确一点..
: (最好後面重点总结一下..)
: 如果你是要1key-1row
: 那你的问题是在sql语法
: 你可以用inner join试试看
: 删文时又看到一个空白不要显示的需求..
: 你可以用on a.key=c.key where c.zz<> ''
: 详细用法请查你用的资料库语法
: : 我用了 left join 语法将 a,b,c,d Table 连结在一起
: : select a*,b.B栏位,c.C栏位,d.D栏位
: : from ((a left join b on a.栏位Key=b.栏位Key)left join
: : c on a.栏位Key=c.栏位Key) left join d on a.栏位Key=d.栏位Key
: : 但是显示出来的资料如下
: : 栏位key A栏位 B栏位 C栏位 D栏位
: : 001 1 AAA AAA
: : 001 1 ABC ACC
: : 001 1 ACC
: : 002 2 BBB BBB DDD
: : 002 2 BBA BBA DDD
: : 003 3 CCC CCC CCC
: : 004 4 DDD
: : 现在是在程式 Form 上有 4个 Table 个别显示 a,b,c,d 的资料
: : 就以 a Table 上就会有 A 栏位多笔重复显示
: : 栏位key A栏位
: : 001 1
: : 001 1
: : 001 1
: : 002 2
: : 002 2
: : 003 3
: : 004 4
: : C Table 上则是
: : 栏位key C栏位
: : 001 AAA
: : 001 ACC
: : 001
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.99.68.46
1F:推 fantasyj:要去form处理,因为table bcd彼此之间并没有pk.. 04/17 16:45