求大神指点这个表怎么查询能不出现重复记录

AI_Ansewer 2013-09-19 04:40:52
create table Lxl_SoftwareMainTenanceRecord 
(
R_ID Nvarchar(50) primary key not null, --编号
R_RID int foreign key references Lxl_SoftwareInfo(S_ID), --软件名称,外键(软件)
R_SMRID Nvarchar(30) foreign key references Lxl_EmpInfo(Emp_ID), --维护人,外键(员工)
R_STime Date not null,--申请时间
R_Phone Nvarchar(30) not null,--客户电话,外键(客户信息)
R_CDate Date not null default getdate(), --完成时间
R_Cause Nvarchar(Max) not null, --技术问题原因
R_Solution Nvarchar(Max) not null, --解决办法
R_Operator Nvarchar(30) foreign key references Lxl_Operator(O_ID) not null, --操作员
R_BZ int not null default(0) --标识
)
...全文
203 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Landa_Peter 2013-09-20
  • 打赏
  • 举报
回复
做一下唯一性约束应该就能解决的
發糞塗牆 2013-09-20
  • 打赏
  • 举报
回复
总之就是你有4个表需要关联的话,最少要有3个关联条件,否则会出现重复数据。这是你这个问题的根源
發糞塗牆 2013-09-20
  • 打赏
  • 举报
回复
select R_ID as 记录编号,S_SNAME AS 软件名称, Emp_Name as 维护人,R_STime as 申请时间, C_Phone as 客户电话,R_CDate as 完成时间, R_Cause as 问题技术原因,R_Solution as 解决方法  from Lxl_CustomerInfo,Lxl_EmpInfo, Lxl_SoftwareInfo,Lxl_SoftwareMainTenanceRecord  where R_RID = S_ID and R_SMRID = Emp_ID and EMP_ID=O_ID AND   R_BZ = 0 个人觉得还要加上红字部分,你试试
AI_Ansewer 2013-09-20
  • 打赏
  • 举报
回复
引用 7 楼 DBA_Huangzj 的回复:
我还在上班,有点是要处理,处理完帮你看看,在此之前如果你有时间,我想得到一些东西: 1、源表的数据,一些就可以了,比如一个软件及相关的员工,以文本方式列出 2、期待结果 3、SELECT里面的那串列名麻烦带上别名,不知道是哪个标的。
我在做一个c#窗体.显示软件的维护记录,就是我现在要查询的那个表,这个表有三个外键,一个是员工表,一个是软件表,一个是操作员表. 操作员表主要作用是添加的时候根据所登录的账号判断操作员是谁,具体就是指示谁添加的这条记录. 下面是我要查询的表所关系到的三个表 表数据让我给清空了.如果您有时间的话,建议你简单的创建一下,添加一下.谢谢了 麻烦你了. 我想要的结果就是查询出软件维护记录表中的所有数据,不重复的. 麻烦你了.十分谢谢你详细的解答.下面是所用到的四张表. 麻烦你了.我自己也在研究研究..感谢你的帮助.
--1.员工表
create table Lxl_EmpInfo
(
Emp_ID Nvarchar(30) primary key not null,--编号.
Emp_Permission Nvarchar(30) not null,--员工权限.
Emp_Name Nvarchar(30) not null,	--员工姓名.
Emp_Phone Nvarchar(20) not null,--员工电话.
Emp_Address	Nvarchar(100) not null,--员工住址.
Emp_Mail	Nvarchar(30),	--员工邮箱
Emp_BZ int not null default(0) --标识
)
--2.软件表
create table Lxl_SoftwareInfo
(
S_ID int primary key identity not null,	--编号,主键.
S_SName Nvarchar(30) not null,	--软件名字.
S_Edition Nvarchar(100) not null,--软件版本号.
S_SID Nvarchar(30) foreign key references Lxl_EmpInfo(Emp_ID) not null,--软件开发人.外键(员工信息)
S_Date date not null,	--开发时间
S_Manufacturer Nvarchar(100) not null,--软件制造商
S_Cycle Nvarchar(50) not null,	--软件开发周期
S_Pledged Nvarchar(100) not null,--售后承诺
S_Deadline date not null,--售后截止日期
S_Notes nvarchar(Max),	--备注
S_Operator Nvarchar(30) foreign key references Lxl_Operator(O_ID) not null, --操作员
S_BZ int not null default(0) --标识
)
--3.操作员表
create table Lxl_Operator
(
O_ID Nvarchar(30) not null primary key,	--编号
O_Usecr Nvarchar(30) not null,	--操作员登陆名
O_Pwd	varbinary(128) not null,--操作员密码
O_BZ int not null default(0)	--标识
)
--4.软件维护记录表(这个是我要查询的.)
create table Lxl_SoftwareMainTenanceRecord 
(
R_ID Nvarchar(50) primary key not null,		--编号
R_RID int foreign key references Lxl_SoftwareInfo(S_ID),	--软件名称,外键(软件)
R_SMRID Nvarchar(30) foreign key references Lxl_EmpInfo(Emp_ID),  --维护人,外键(员工)
R_STime Date not null,--申请时间
R_Phone Nvarchar(30) not null,--客户电话,外键(客户信息)
R_CDate Date not null default getdate(), --完成时间
R_Cause Nvarchar(Max) not null, --技术问题原因
R_Solution Nvarchar(Max) not null, --解决办法
R_Operator  Nvarchar(30) foreign key references Lxl_Operator(O_ID) not null, --操作员
R_BZ int not null default(0)				  --标识
)
發糞塗牆 2013-09-20
  • 打赏
  • 举报
回复
我发现你代码有点问题,你有4个表,理论上应该有最少3个关联条件,但是你只有2个,and   R_BZ = 0这个不算关联条件,只是筛选条件而已,也就是说,你的重复数据是因为缺少了一个关联条件,你检查一下4个表,确定每个表都有关联
發糞塗牆 2013-09-20
  • 打赏
  • 举报
回复
我还在上班,有点是要处理,处理完帮你看看,在此之前如果你有时间,我想得到一些东西: 1、源表的数据,一些就可以了,比如一个软件及相关的员工,以文本方式列出 2、期待结果 3、SELECT里面的那串列名麻烦带上别名,不知道是哪个标的。
AI_Ansewer 2013-09-20
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
关联产生重复数据一般有两种情况: 1、关联的时候条件没有选够,比如主键是2个列,你在on里面只写了一个。 2、主表明细表关联,由于一个主表记录可能对应多个明细记录,所以有重复,这种数据是正常的,一般可以用行转列把明细部分的数据打横展示。具体看你的语句和表结构。你给出的信息不够
select R_ID as 记录编号,S_SNAME AS 软件名称,Emp_Name as 维护人,R_STime as 申请时间,C_Phone as 客户电话,R_CDate as 完成时间,R_Cause as 问题技术原因,R_Solution as 解决方法 from Lxl_CustomerInfo,Lxl_EmpInfo,Lxl_SoftwareInfo,Lxl_SoftwareMainTenanceRecord where R_RID = S_ID and R_SMRID = Emp_ID and  and R_BZ = 0
S_ID 是软件表的主键,S_SNAME 是软件表的软件名 Emp_ID 是员工表的主键, Emp_Name 是员工表的员工姓名.我这么写就出现重复记录..应该怎么解决..谢谢
發糞塗牆 2013-09-20
  • 打赏
  • 举报
回复
关联产生重复数据一般有两种情况: 1、关联的时候条件没有选够,比如主键是2个列,你在on里面只写了一个。 2、主表明细表关联,由于一个主表记录可能对应多个明细记录,所以有重复,这种数据是正常的,一般可以用行转列把明细部分的数据打横展示。具体看你的语句和表结构。你给出的信息不够
AI_Ansewer 2013-09-20
  • 打赏
  • 举报
回复
引用 1 楼 u012173239 的回复:
你是单独查询一个表,还是联合查询有外键的表?
我这个表的编号是主键,主键不也是唯一的么,不能重复的么
AI_Ansewer 2013-09-20
  • 打赏
  • 举报
回复
引用 1 楼 u012173239 的回复:
你是单独查询一个表,还是联合查询有外键的表?
是联合查询 ,查询出软件表对应的软件的名称和员工的姓名.但是查询出来有重复记录..
AI_Ansewer 2013-09-20
  • 打赏
  • 举报
回复
引用 16 楼 DBA_Huangzj 的回复:
那你首先保证,每个表都有关联,因为没有关联的表是使用cross join,也就是笛卡儿积,已经不是单纯的重复了,会有大量重复
搞了半天是我出现了一些细节的问题..按照你的思路是完全行得通的..太感谢你了..让我能仔细检查我的语句..
發糞塗牆 2013-09-20
  • 打赏
  • 举报
回复
唯一约束拿来做数据表的唯一控制还可以,但是代码里面就没意义了
發糞塗牆 2013-09-20
  • 打赏
  • 举报
回复
那你首先保证,每个表都有关联,因为没有关联的表是使用cross join,也就是笛卡儿积,已经不是单纯的重复了,会有大量重复
AI_Ansewer 2013-09-20
  • 打赏
  • 举报
回复
引用 12 楼 u012158899 的回复:
做一下唯一性约束应该就能解决的
具体点呢? 怎么做?
AI_Ansewer 2013-09-20
  • 打赏
  • 举报
回复
引用 11 楼 DBA_Huangzj 的回复:
总之就是你有4个表需要关联的话,最少要有3个关联条件,否则会出现重复数据。这是你这个问题的根源
嗯嗯..我觉得也是..谢谢你的解答..我再好好看看吧
AI_Ansewer 2013-09-20
  • 打赏
  • 举报
回复
引用 10 楼 DBA_Huangzj 的回复:
select R_ID as 记录编号,S_SNAME AS 软件名称, Emp_Name as 维护人,R_STime as 申请时间, C_Phone as 客户电话,R_CDate as 完成时间, R_Cause as 问题技术原因,R_Solution as 解决方法  from Lxl_CustomerInfo,Lxl_EmpInfo, Lxl_SoftwareInfo,Lxl_SoftwareMainTenanceRecord  where R_RID = S_ID and R_SMRID = Emp_ID and EMP_ID=O_ID AND   R_BZ = 0 个人觉得还要加上红字部分,你试试
这个我试过了..但是也会出现重复..我觉得我解决问题的根源错了..可能是思路不对..
浪淘沙1997 2013-09-19
  • 打赏
  • 举报
回复
用编号做唯一建值操作即可
Landa_Jimmy 2013-09-19
  • 打赏
  • 举报
回复
你是单独查询一个表,还是联合查询有外键的表?

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧