问题描述
- sql查询结果重复问题 是否表结构设计问题
-
信息表a
sid scope_type begin_date end_date
1 3
2 2
3 1scope_type(1:按全部;2:按渠道;3:按机构)
范围表b
tid sid channel org_id
1 1 1 null
2 1 3 null
3 1 1011.两表通过sid关联,没有设外键,
2.新增记录时,先写表a,再写表b
3.当scope_type=1时,则只需a表新增1条记录.
当scope_type不为1时,在a表新增1条记录,b表根据选择的机构和渠道,新增记录.
如选择了机构101,102,渠道1
则b表新增3条记录
4.查询时,根据时间范围,查出的结果有重复的,求解select b.* from a, b where a.sid = b.sid(+) and a.sid = 1 and begin_date > ? and end_date <= ?
ps:我考虑到两个方面:
1.表结构设计问题
2.sql方面
解决方案
select
distinct b.* --distinct一下吧,
from a, b
where a.sid = b.sid(+)
and a.sid = 1
and begin_date > ?
and end_date <= ?
解决方案二:
不想使用distinct,而且distinct也不行的,我试过
select
b.*
from a, b
where a.sid = b.sid(+)
and begin_date > ?
and end_date <= ?
解决方案三:
问题描述得不够清楚
对于上面你提供的2个表的已有数据及你的SQL语句,你期望得到什么样的查询结果?
请写出来
我要查出的结果没有重复的,即一个sid显示一条记录,但这两张表的关系是一对多,关联里面有多条记录
解决方案五:
将表t1和t2关联后,结果集中确实是存在三个“t1.sid=1”的记录呀
对于这三条记录,这三条记录不重复呀
解决方案六:
如果你想得到一条记录,除非t2表中sid=1的记录仅有一条,你现在的数据是:
在t2表中,sid=1的记录有3条,你却想要得到一条记录?请指出想要显示的是这三条中的哪条记录。
或者你想对这三条记录按sid分组?
时间: 2025-01-21 04:05:44