oracle中怎么把有相同字段的三张表A,B,C关联呢? 5C

oracle中怎么把有相同字段的三张表A,B,C关联呢?

相同字段全是一对多的关系。已经尝试用A.ID=B.ID AND B.ID=C.ID AND C.ID=A.ID这种方式把三张表内相同的三个字段都这么处理了,但是查询到的结果全部是重复数据

```select C.visit_date ,C.visit_no,C.patient_id ,O.DIAGNOSIS_NO
from CANCER_OUPT_PAT C,
CLINIC_MASTER M ,
OUTP_diagnosis O
WHERE C.PATIENT_ID=M.PATIENT_ID
AND C.visit_date=M.VISIT_DATE
AND C.visit_no=M.VISIT_NO
and O.PATIENT_ID=C.PATIENT_ID
AND O.visit_no=C.VISIT_NO
AND O.VISIT_DATE=M.VISIT_DATE
AND O.DIAGNOSIS_DESC = C.DIAGNOSIS_DESC
AND M.NAME=C.name


但是查询的结果全是重复的数据


## 怎么关联才能没有这些重复的数据?因为查询的列都不唯一所以不能用distanct


## 还有oracle中 where之后的判断语句是按什么顺序执行的?从where之后的第一句开始判断吗?

## 有个疑问,如果要增加查询非关联字段,是不是要在group by 后面添加增加的字段?(我尝试添加后,查询的结果又变成重复循环数据了)?

4个回答

1.如果是一对多关系,只能将查询结果加distinct去重,或你根据业务看看是否有其他字段可以关联去重。
2.where的条件是按倒序执行的,即从下往上执行。

去重也可以考虑用分组group by

select C.visit_date ,C.visit_no,C.patient_id ,O.DIAGNOSIS_NO 
from CANCER_OUPT_PAT C,
CLINIC_MASTER M ,
OUTP_diagnosis O 
WHERE C.PATIENT_ID=M.PATIENT_ID
AND C.visit_date=M.VISIT_DATE 
AND C.visit_no=M.VISIT_NO 
and O.PATIENT_ID=C.PATIENT_ID 
AND O.visit_no=C.VISIT_NO 
AND O.VISIT_DATE=M.VISIT_DATE 
AND O.DIAGNOSIS_DESC = C.DIAGNOSIS_DESC 
AND M.NAME=C.name 
group by C.visit_date,  C.visit_no,C.name 
  1. 既然是一对多,按查询的原理一定是存在重复记录,只能在where语句以条件进行约束和过滤,或者在前端循环处理
  2. 表连接用where来完成,不是sql 92标准,逻辑很不清晰,建议采用left join方式书写

1.你可以选择distinct去重
2,确定好三个表的关系,确定好主表和字表,用主表left join 字表

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
oracle有两张表A,B
oracle有两张表A,B B表查询出来的所有数据字段,A表都有这些字段,A表是空表,怎么把B表查询出来的数据插入到空表A?
有3张表,a,b,c a跟b有关系,b跟c有关系
例如:a表数据: rn 考试科目 考试成绩 考生 考试标题 rn 01 02 001 期中考试rnb表rn 类型id 状态id 名称rn 1 01 语文rn 1 02 数学rn 2 01 优秀rn 2 02 良好rn 3 001 小明rn 3 002 小红rnc表rn 类型id 名称 rn 1 考试科目 rn 2 考试成绩 rn 3 考生rn查询结果要求: 考试科目 考试成绩 考生 考试标题rn 语文 良好 小明 期中考试rn
根据表A和表B有对应字段C,把表A的a字段 更新到表B的b字段
根据表A和表B有对应字段c,把表A的a字段 更新到表B的b字段rnrn怎么写???rnrn具体是字段c是工号
oracle一张表的id关联另一张表中的字段
假设现在有两个表 表一: idnum sname score 140643851 小A 87 140643856 小B 88 140643931 小C 92 140643611 小D 77 140643427 小E 81 140643155 小F 95 140643815 小G 78 14064349
如何在a,b,c三张表中查一条记录'1'?他们有相同的字段code
如何在a,b,c三张表中查一条记录'1'?他们有相同的字段code
我现有三张表 A ,B ,C 如何做到更新C的同时更新A,B表中的某些字段?
A表结构 jyd_id jydbh jydztrnB表结构 hw_id jydbh hwztrnC表结构 fh_id fhqdbh jydbh hwztrnA表中的jydbh=B表中的jydbh=C表中的jydbh rnrn我现在只知道C表中的fhqdbh 如何更新A,B表中的jydzt,和hwztrnrnA表对应B表是 一对多的关系 比如有这么几条数据:rnA表 jyd_id jydbh jydztrn 2 mfgb002 已审核rnB表 hw_id jydbh hwzt hwmcrn 1 mfgb002 在库 Arn 2 mfgb002 在库 BrnC表 fh_id fhqdbh jydbh jydzt hwztrn ... .... mfgb002 已发车 已发车rnC表中的数据是从A B表中得到的rn我现在只知道fhqdbh 而且已经通过 set Rs = Conn.Execute("update fhqd set jydzt='已发车',hwzt='已发车' where fhqdbh='"&fhqdbh&"'" )rn更改了c表中的jydzt 和hwzt 为已发车rn现在能不能倒回来 更新A ,B表中的jydzt 和hwztrn
有两张表a和b,字段结构相同,如何得出在a中但不在b中的记录?要求效率最高
假如字段是f1及f2,都为char类型rnrn如果用select a.* from a,b where concat(a.f1,a.f2) not in (select distinct concat(b.f1,b.f2))rnrn是不行的,速度奇慢无比rnrn另,有没有语句将一个表中的数据直接移到另一张表,即不要insert再delete,一句搞定
三张表的关联问题
有三张表A,B,C,最终的查询结果是:rn先B,C表根据一定的条件关联后查询出数据,然后再去A表用一定的条件去关联.rnSQL中可以这样写:rnselect a.*,d.* from a,(select b.*,c.* from b,c) as d where a.id=b.idrn或者我把B,C做成视图,然后用A表跟视图关联rnrn但现在是在Oracle数据为中,并且不要建视图,就要用SQL语句写,不知道这样对不对rn由于没有用过,本地也没有Oracle数据库,所以没法测试,希望高手们解答rn
把表B中的记录插入到表A,A,B表字段不一定相同
语言vb,数据库SQL server,把表B中的记录插入到表A,以表A的字段为准,若B表中的字段比A表多则B表中多余的字段不能插入,若B表中的字段少于A表则少的字段为空,请问这条SQL语句该如何写,谢谢!
怎样把B表字段a,b,c内容复制A表字段a,b,c呢?其中A表字段已有内容
怎样把b用户B表字段a,b,c内容复制a用户A表字段a,b,c呢?其中A表字段已有内容,c为long型字段,且A表有用序列建的非空自增字段rn
怎么在数据窗口中实现字段A=字段B*字段C?
怎么在数据窗口中实现字段A=字段B*字段C?并且A的值要可见,并能用UPDATE(DW_1)进行数据插入,谢谢!!!
oracle d,c,b,a转换成a,b,c,d
如题rnoracle中有没可用的函数?
3张表a,b,c。多表连接
3张表a,b,c。要在a分别左联b和c的同时,b和c要内联。一句怎么写?rnrn
把字段A的内容,中间有空格,分别更新到B和C列中,怎么写?
字段A内容rn中国 广东省rn中国 湖南省rn中国 黑龙江rnrn中国后面有空格,再建一个B和C字段,分别从A字段中得到中国(B)和广东省(C),湖南省(C)rnrn字段A内容 字段B内容 字段C内容rn中国 广东省 中国 广东省rn中国 湖南省 中国 湖南省rn中国 黑龙江 中国 黑龙江rnrn这样的UPDATE怎么写?可以分多条多步实现.
请问Oracle更新表,如果a,b,c三个字段相同更新第四个字段
有两种情况,数据在同一个表中,第四个字段是时间,我想保留时间最新得一条记录其他删除,请问应该怎么写,求个语句例子
怎么通过C表关联A、B表,找出A、B表中相同的数据
有3个表,其中A表中的数据有:rn1.中国 北京rn2.中国 上海rn3.日本 东京rnB表中的数据有:rn1.zhongguo beijingrn2.zhongguo guangzhournC表中的数据有:rn1.中国 zhongguorn2.北京 beijingrnrn现在想通过C表关联A、B表,找出A、B表中相同的数据,如上面的结果要找出:rn中国 北京 zhongguo beijingrn其中,中国 北京为A表内容,zhongguo beijing 为B表内容。rnrn希望大家能帮我解决这个问题,谢谢!
SQL 根据字段A的内容,在字段B中找到相同的内容所在位置,并在字段C中赋值
具体如下:rn1、有很多设备,每个设备都有很多端口port,每个端口都有很多时隙ts,每个时隙都能传输不同的业务;rn2、同一设备中的端口、时隙可以任意连接至其他的端口、时隙,用于业务的传输;rn3、这些设备之间的端口互相连接,形成网络;rn4、mysql中建了时隙交叉表和端口连接表;rn5、时隙交叉表中有5个字段,分别是port1、ts1、port2、ts2、用途;rn6、端口连接表中有2个字段,分别是port1、port2rn问题:rn根据时隙交叉表中port1_ts1-port2_ts2关系和端口连接表中port1-port2关系,将用途填写到对应的地方。rn比如:rn时隙交叉表中有一条记录 p1、ts1、p2、ts2、用途1,rn在端口连接表中找到对应的记录行 p2、p3,rn回到时隙交叉表中找到对应的记录行 p3、ts2、p4、ts4 ,并把用途1填入其用途字段。rn要怎样才能用update最高效的完成?rnrn之前我写的语句:rnupdate 端口连接表,时隙交叉表,时隙交叉表 as m set 时隙交叉表.用途=m.用途 where 时隙交叉表.用途='' and 时隙交叉表.port2=端口连接表.port1 and 端口连接表.port2=m.port1 and 时隙交叉表.ts2=m.ts1rnrn时隙交叉表有45万记录,端口连接表有5千多记录,这样的语句运行效率不高,请教大虾有没有更好的解决办法?
表A中B字段,C字段相同的记录,只取D字段最高值的记录
如表Arnrn字段rnB C Drn值rna b 300rna b 200rnb c 100rnb c 200rnrnrn只取出记录中的rnrna b 300rnb c 200rnrn因为四条记录中,有两条B,C字段值相同,只取一条,取哪条呢,取D字段值最高的记录rnrnrnrn
A表中A字段=B表中A字段+B字段的和
用ASP+Access做有点像学生管理系统的,是以一级级往下跳,rn结构是这样的rn市->镇->村rn在显示市的ASP页面中显示所有的市,相对应的也显示出该市下的总人数、总收入等。而这些是从各个镇统计出来的。而镇又是从村统计出来的。现在就输入村民及村民的收入。有办法在市。镇表中相应的字段自动相加吗?需要建关连吗?如果要的话。可以说个大体的方法吗?rn像这样的结构,怎样设计才比较合理。
a=b, b=c, a=c??
给大家出个题rnrna=b, b=c, a=c??rnrn用代码来看吧:rn[code=Java]rn int i = 123;rn Integer a = new Integer(i);rn int b = i;rn Integer c = new Integer(i);rn System.out.println(a == b);rn System.out.println(b == c);rn System.out.println(a == c);rn[/code]rnrn好吧,看谁能给出正确答案!
a=b b=c 就a=c?
Integer a=new Integer(3);rnInteger b=new Integer(3);rnSystem.out.println(a==3);rnSystem.out.println(b==3);rnSystem.out.println(a==b);
有字段,A,B,C,D,想要查询表中字段A,B值重复的行,怎么写哦???
就是要提取表中A,B字段的值都相同的行
oracle 处理一张表两列字段,若A列和B列有连续3个字符相同,则A列和B列字段相同。
create or replace function checks(v_a varchar2,v_b varchar)rn return numberrn asrn num number;rn cou number;rn beginrn num := -1;rn cou:=0;rn for i in 1..length(v_b)-2 looprn if instr(v_a,substr(v_b,i,3))>0 thenrn cou:=cou+1;rn end if;rn end loop;rn if cou=length(v_b) thenrn return cou;rn end if;rn dbms_output.put_line(cou||' '||length(v_b));rn return num;rn end;rnrnSQL> select * from a where checks(a,b)>0;
两张表A,B有相同的字段C,B.C包含在A.C中,求所有不等于B.C的A.C
谢谢
有四个字段A,B,C,D,想找出所有A,B相同但C不同的记录
有四个字段A,B,C,D,想找出所有A,B相同但C不同的记录rn输入rnA B C Drn---------- ---------- ---------- ----------rnaa bb cc 123rnaa bb dd 222rnaa tt cc 233rnaa tt cc 456rnaa uu cc 23455rn输出rnrnA B C Drn---------- ---------- ---------- ----------rnaa bb cc 123rnaa bb dd 222
如何把A表的a字段的数据复制到B表的b字段中去?a字段和b字段的字段名和数据类型一样.
如题.
接口A和接口B有两个相同的方法a,b,接口C继承A,B,接口C继承了几个方法
接口A和接口B有两个相同的方法a,b,接口C继承A,B,接口C继承了几个方法
oracle中部分字段相同的两张表合并
表t1有字段a、b,如:rna brn1 5rn2 8rn3 9rn表t2有字段a、c,如:rna crn2 10rn3 4rn4 5rn查询后把两张表的数据合起来显示的字段为a、b、c,如:rna b crn1 5 rn2 8 10rn3 9 4rn4 5rn百度看到一个用法union,rnselect a, b, null as c from t1rnunionrnselect a,null as b, c from t2rn测试却是结果如下:rna b crn1 5 rn2 8 rn2 10rn3 9 rn3 4rn4 5rn百度还有人说用full join,请问a列如何处理?整个语句该如何写?谢谢
同一张表中两个字段的关联更新 --->>
表一: 帐号表1rnUserID -- 用户ID, 数字 . 主键rnUserName -- 用户名,字符串 rnDeptID -- 所在部门ID,数字rn表一: 帐号表2rnUserID -- 用户ID, 数字 . 主键rnUserName -- 用户名,字符串 rnDeptID -- 所在部门ID,数字rnDeptName -- 所在部门名称 . . . rn表三: 部门表rnDeptID -- 部门ID号,数字,主键rnDeptName -- 部门名称,字符串rnDeptDisp -- 部门描述,字符串rnrn问题: 用帐号表1 ,还是用帐号表2 好???rnrn部门表基本上很少改动 , 然而帐号表访问频率是很高的...如果采用帐号表1的话,我每次访问一个帐号,为了获得用户所在部门的名字,都需要同时访问一下部门表 . .rn rn如果采用帐号表2的话,我只有在帐号更新的情况下,才需要访问部门表 . . .rn用帐号表1更规范一些 . . . 帐号表2冗余数据多一些 . . . .rn但是从效率上,帐号表2更快一些 . .而且SQL语句访问相对更简单一些 . . .rn我应该采用哪种帐号表??rnrn假设采用帐号表2的情况下, 我如何做到在同一张表中DeptName 和DeptID的关联 . .rn也就是说: 用户A在帐号表2中把自己的所在部门DeptID的值从1改成了2 , 数据库怎么实现帐号表2中的DeptName的自动更新???rnrn谢谢各位了...rn
a=b; b=c;
新人看视频学习ORACLE基础,遇到个问题:rnrn有三个表rnTAB1: col,....rnTAB2: col1,col2....rnTAB3: col....rnrnselect 1.col,3.col from TAB1 1,TAB3 3rn where (xxxx)rnrnTAB2是1和3的中间表rn选出符合条件:TAB1.COL = TAB2.COL1,同时TAB2.COL1这一行的TAB2.COL2的值TAB2.COL2 = TAB3.COLrn这样的WHERE 条件该怎么写呢?rn应该不是rnwhere tab1.col = tab2.col1rnand tab2.col1 = tab3.col 吧?
求sql语句:一张表有三个字段A, B, C, 按C分类,求每类中B最小的记录
一张表有三个字段rnA, B, Crn按C分类(group by C),求每类中B最小的记录rnrn请文sql语句应该怎么写?rn谢谢
oracle中order by 字段A,对于字段A的值相同的几条数据,是怎么排序的?
oracle中 order by 字段A,对于字段A的值相同的几条数据,是怎么排序的?
请问有两表,一表有字段A,B,二表有字段A,B,C,现在代码只有A字段值,怎么把一表A,B字段值插入到二表中,谢谢!在线结贴
如题
数据库A字段设置默认值关联B字段
[img=https://img-bbs.csdn.net/upload/201707/05/1499270238_958216.png][/img] 设置LendDate字段的默认值为GETDATE();rnWillDate字段的默认值我想设置成LendDate的日期加一个月。rnDATEADD(MONTH,1,LendDate)rn这样子写了,但却是字符串,与datetime类型不符rn请各位教教我怎么设置这种类型的默认值
更新多张表的相同字段
有A,B,C,D,E,F,G多张表,都有相同的一个数据字段X,有没有什么办法同时更新这一字段的值?
对比A,B两张表,将B表中与A表ID相同的记录写到C表,c表结构与B表相同,请问如何写?
A表 rn ID NAME BAKrn 12 GOGO C12rn 23 RIK C2rn 21 BOB C3rn rn B表 rn ID NAME DATE rn 20 LILY 2007rn 21 BOB 2007rn 24 GIGI 2006rn
两张表中相同的字段相加
第1张表,表名:arn time 编号 容量 台数 次数 数量rn 2011-06 杭州 12 21 13 14rn 2011-06 丽水 15 16 17 18rn 2011-07 杭州 19 20 23 24rn 2011-07 丽水 25 26 27 28rn第2张表,表名:brn time 编号 容量 台数 rn 2011-06 杭州 12 21 rn 2011-06 丽水 15 16 rn 2011-07 杭州 19 20 rn 2011-07 丽水 25 26 rn我想得到的结果,第一张表+第2张表中相同的字段,没有的保留,结果存在第三张表:C中 结果如下,最好可以写个VIEW rn time 编号 容量 台数 次数 数量rn 2011-06 杭州 24 42 13 14rn 2011-06 丽水 30 32 17 18rn 2011-07 杭州 38 40 23 24rn 2011-07 丽水 50 52 27 28rn
将一张表a字段相同的b字段拼接在一起如何做
大家好,我遇到一个行列转换的问题。rn就是一张表抽出a,b两个字段,让后a字段相同的,把b拼接在一起rnrn如 a brn 1 xrn 1 yrn 1 zrn 2 krn 2 ern-----------------------rn a brn 1 x,y,zrn 2 k,ernrn由于抽出的条目不定,有些棘手,没有找到办法。请大家指点一下,解决迷津。谢谢。rn
有一表A有b和c 两个字段,如何把c字段名改为d字段名.
如上。
三表连接a,b,c a和b先内连接,再和c外连接,该怎么写
三表连接a,b,c a和b先内连接,再和c外连接,db2 该怎么写rnselect * from a inner join brnon a.id = b.idrnleft outer join c on b.oid = c.oidrn这样写对不对?
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制