作者Piceman (派斯面)
看板Database
标题Re: [SQL ] 请问多个相似 Table 串联查询如何写??
时间Sun Apr 17 17:05:15 2011
1. 标准作法是跑4个query,个别查询
不过asp.net上datasource可以使用别的datasource作为资料来源
也就是说datasourceB/C/D可以设定使用dsA的key作为资料来源
2. 你坚持使用单一query的话
那我上面提到的inner join就不合适了
要用你说的left join拉全部资料
拉完之後,往formB/C/D塞资料时再另外过滤
你说的分类我不懂..
如果是我的话,首选是方法1
要用方法二的话,我会偏好用dataset先过滤再倒到datagrid
如果是侏罗纪时代的遗迹系统(XD)
前端资料来源不能变动的情况下
那就会用datagridview的资料插入事件(rowwilladded?)检查栏位有没有值
再决定要不要插入资料
以上提了三种阶段(database/datasource/datagrid event)的对应作法
单论复杂度的话,第三种最简单
缺点是以後会改的很痛苦
不过不需要另行设定dataset(方法二)
或处理datasource(方法一)
请挑你喜欢的服用吧
※ 引述《evantw (安安小成)》之铭言:
: 我这样说明好了
: 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 上的程式下手呢??
: 希望这样讲解各位能够明白我所要表达的 =.="
: 谢谢~~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.42.55.46