作者onear (万一)
看板Database
标题Re: [SQL ] 这样的SQL怎麽下
时间Fri Oct 12 23:43:38 2012
※ 引述《herman602 (奸商)》之铭言:
: 我现在有五个资料表
: 1. `audience` 储存分众资讯
: (id, name) 主键为id
: 2. `table` 储存表单基本资料的
: (id, name, word, pdf) 主键为id
: 3. `table_class` 储存表单类别名称叙述用的
: (id, name) 主键为id
: 4. `table_class_data` 储存表单与类别关系用的 (一个表单可以在多个类别之下)
: (id, table_id, table_class)
: 主键为id, table_id参考`table`.`id`, table_class参考`table_class`.`id`
: 5. `table_audience` 储存表单分众导览资讯用的 (一个表单可以在多个分众之下)
: (id, table_id, audience_id)
: 主键为id, table_id参考`table`.`id`, audience_id参考`audience`.`id`
: 我现在的问题是
: 要依据不同的audience, 印出不同表格类别, 然後再印出表格(没有在该分众的不显示)
: 现在的状况是, 有些表格类别下面可能没有任何表格要印(因为都不属目前网页选的分众)
: 要怎麽知道这些表格类别下面是否有表格需要印呢
: 没有的话, 该表格类别就不要被SELECT出来....
你的问题应该是出在第一句的顺序。
资料串连顺序本来就是:分众 1<->* 表单 1<->* 表单类别
只要能串出第三项的表单类别,前面的分众与表单这二项就不会是空值,
自然不会有 "没有的话, 该表格类别就不要被SELECT出来" 的问题。
因此第一步:把上述资料一对多对多的三阶关连,展开成为一个单一的view1。
(或是实体table,视目前使用资料库而定)
第二步:利用view1对分众及表单类别做汇总,可得view2,即[分众->表单类别]关系。
第三步:选取分众及表单类别後,先用table_class_data取得[表单类别->表单]关系,
再与view1比对,排除於view1不存在的关系,即得最终结果。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.251.140.95
※ 编辑: onear 来自: 111.251.140.95 (10/12 23:48)
1F:推 herman602:谢谢! 10/19 20:15