sql-oracle 实现多表关联SQL脚本

问题描述

oracle 实现多表关联SQL脚本

A表:
XH IDA NAME AGE
1 1 张三 20
2 2 李四 18
3 3 王五 19
4 4 lily 19

B表
XH IDB IDA
1 1 1
2 2 1
3 3 1
4 4 3
5 5 3
6 6 4
7 7 4

C表
XH IDC IDB
1 1 1
2 1 2
3 1 3
4 2 6
5 2 7

A表的IDA与B表的IDA有关系,B表的IDB与C表的IDB有关系
实现效果:
XH IDA NAME AGE IDB IDC
1 1 张三 20 1,2,3 1
2 2 李四 18

3 3 王五 19 4,5
4 4 lily 19 6,7 2

解决方案

select XH IDA NAME AGE from A jon B on A.IDA = B.IDA AND B.IDB in (select IDB from C)

解决方案二:

SELECT T.*, C.IDC FROM (
SELECT XH, IDA, NAME, AGE, IDB FROM A, B
WHERE A.IDA = B.IDB(+)
) T, C
WHERE T.IDB = C.IDB(+)
外层左关联我不太确定。

解决方案三:

外连接我不太熟,但知道要实现这个查询肯定要用oracle的 列转行 函数 wm_concat

解决方案四:

外连接我不太熟,但知道要实现这个查询肯定要用oracle的 列转行 函数 wm_concat

解决方案五:

wm_concat可以实现

解决方案六:

先确保IDB在表B是唯一的 同样IDA在表A是唯一的
SELECT
A.XH, A.IDA,A.NAME,A.AGE,B.IDB,C.IDC
FROM C
LEFT OUTER JOIN B
ON C.IDB = B.IDB
LEFT OUTER JOIN A
ON B.IDA = A.IDA

时间: 2024-10-09 07:47:39

sql-oracle 实现多表关联SQL脚本的相关文章

Oracle\MS SQL Server Update多表关联更新

原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据.我们先来讨论根据其他表数据更新你要更新的表   一.MS    SQL    Server   多表关联更新      sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来.虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就

sql-Oracle怎样分析多表关联SQL

问题描述 Oracle怎样分析多表关联SQL 两三个表的关联查询还能明白,但是四个以上的关联感觉搞不懂,请问多表关联有什么规律吗?比如 SELECT * FROM XUTEST LEFT JOIN XUTEST2 LEFT JOIN XUTEST3 ON XUTEST3.SUPID=XUTEST2.SUPID ON XUTEST3.SUPID=XUTEST.SUPID 与 SELECT * FROM XUTEST LEFT JOIN XUTEST2 ON XUTEST2.SUPID=XUTEST

MySQL千万级多表关联SQL语句调优

本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使千万级表关联查询第一页结果能在2秒内完成(真实业务告警系统优化结果).   需要优化的查询:使用explain      出现了Using temporary:      有分页时出现了Using filesort则表示使用不了索引,需要根据下面的技巧来调整语句      rows过多,或者几乎是全表的记录数:      key 是 (NULL):      possible_keys 出现过多(

【SQL】在SQL Server中多表关联查询问题

好久没有写SQL语句的多表连接查询,总在用框架进行持久化操作.今天写了一个多表关联查询,想根据两个字段唯一确定一条数据   失败的案例如下: SELECT cyb.id,ad.name FROM [GeneShop].[dbo].[t_member_cyb] cyb ,[GeneShop].[dbo].xx_admin ad,[GeneShop].[dbo].t_bg bg where cyb.hzjg_id = ad.id and cyb.id = bg.cyb_id and (cyb.cyb

oracle索引多表查询SQL

问题描述 [color=red][/color]一下是SQL查询语句SELECT f.bill_num as B_LNO, f.bill_date as DATEB_L, f.ship_name as SHIP_NAME, B.tc_num_tc as CERTIFICATENO, '' as ORDINE, '' as CLIENTE, B.prod_name AS FAMIGLIA, B.SPEC AS QUALITY, B.mat_no AS COILNO, B.mat_no AS PAC

sql oracle 数据库-一个表空间可以拥有两个用户吗

问题描述 一个表空间可以拥有两个用户吗 Create tablespace pro Datafile 'doradataworkts01.dbf Size 3m Autoextend on 请问上面datafile workts01.dbf文件里面包括表空间吗? 解决方案 当你创建用户的时候你就知道了,系统会让你制定表空间,若不制定就会设置为默认 1个数据库实例可以有多个表空间,一般用户是在表空间下的, 也就是说表空间是用户的上级,自然一个表空间就可以有多个用户了

sql server随机获取表记录sql语句

sqlserver随机取记录方法只要用newid()即可 sqlserver已经有自带的一个newid()函数,它返回的是一个GUID,因此我们可以获取表记录时按这个newid()进行排序,因为newid()的结果是每次都不一样的,所以这样子查询的结果保证了每次排序的结果均是不一样的,以下以Northwind库中的orders表为例写一下获取10条随机记录: 语法  代码如下 复制代码 select TOP N * From TABLE Order By NewID() 例 SELECT TOP

Oracle多表关联的update和delete

由于Oracle不支持update或delete from语句,因此,Oracle的多表关联update和delete必须借助于 子查询,同理,Oracle也不支持同时update或delete多张表,其典型用法如下: 多表关联update 首先,构造测试表和数据如下: SYS@TEST16> create table testa as select owner,table_name,status from dba_tables; Table created. SYS@TEST16> crea

sql oracle数据库关联表查询

问题描述 sql oracle数据库关联表查询 现在有一个教师表(教师号 教师名) 课程号(教师号 课程号 课程名) 教室表(教师号 课程号 教室号 教室名) 想显示所有教室的教师名和课程名. 就是想问这种关联的查询语句 排除表中一些矛盾的存在哈 谢谢 解决方案 select b.教师名,c.课程名 from 教室表 a LEFT JOIN 教师表 b ON a.教师号=b.教师号 LEFT JOIN 课程表 c ON 教师表 b ON a.教师号=c.教师号 这个才是对的,刚刚没看清楚写错了.