今天在无意间查询到一个SQL,有两张表,一张用户表,用户表中有个personroles字段,CLOB类型,里面是逗号分隔的角色id(A,B,C,D),需要查询每个人和其现有的角色。问题在于用户表和角色表的关联,直接left join用roles.id in (user.personroles),查询不出来,最后看到了ORACLE中有个函数instr
instr()函数的格式 (俗称:字符查找函数)
格式一:instr( string1, string2 ) / instr(源字符串, 目标字符串)
格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] ) / instr(源字符串, 目标字符串, 起始位置, 匹配序号)
解析:string2 的值要在string1中查找,是从start_position给出的数值(即:位置)开始在string1检索,检索第nth_appearance(几)次出现string2。
最终写出的sql如下:
select a.chinaname,
a.personroles,
wm_concat(b.chinaname)
from sys_user a
join sys_roles b
on instr(',' || to_char(a.personroles) || ',', ',' || b.id || ',') > 0
where a.delstatus = 0
group by a.chinaname, a.personroles;
查询结果正确。
在做项目的过程
中
,发现开发库
中
某张
表
的某
字段
有许多值是空的,而测试库
中
该
字段
的值则是有的。
那么,有什么办法能将测试库
中
该
字段
的值更新到开发库
中
呢?
SQL
Server
中
这是比较容易解决的,而
Oracle
中
不知道方法了。
SQL
Server
中
类似问题的解决方法
后来只好用笨的方法:
首先,将数据复制到Excel;(假设称测试库的
表
为A–含有数据)
然后,在开发库
中
建立和
表
A同结构的
表
B;(这里为了导入数据的简单,我对
表
B的结构进行了改造,只有两个
字段
)
图
表
B的数据
再利用PL
SQL
的导入功能将这些数据导入到
表
B
中
(此时
表
B的数据
转自:doshre
1)instr()函数的格式 (俗称:字符查找函数)
INSTR( string, substring [, start_position [, th_appearance ] ] )
string - 要搜索的字符串。字符串可以是CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB等类型。
substring - 要在字符串(string)
中
搜索的子字符串。 子字符串可以是CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCL
ORACLE
学习笔记--基本select语句、函数、多
表
关联
select name,age from users;select name,age from users where age>20;select a.name,...
select A
表
.
字段
1,A
表
.
字段
2,B
表
.
字段
返回,C
表
.
字段
返回 from A
表
,B
表
,C
表
[where A
表
,B
表
,C
表
关联
及各自的条件语句]但是这个方法有一个缺点,那就是在动态的生成这个查询语句的业务逻辑程序仍然很复杂。这里就介绍一个降低业务逻辑复杂度的查询
sql
生成方式。其语法结构如下:select A
表
.
字段
1,A
表
.
字段
2,B
表
.
字段
,C
表
.
字段
from A
表
[where...
select si.ID_NUMBER,p.POLICYFLAG,p.PAY_TIME
from STUDENTS_INFO si
left join orders o on si.ID_NUMBER = o.CID
LEFT join policies p ON p.ORDER_ID = o.ORDER_ID
where ...
A、B两张
表
,通过
关联
字段
复制B
表
中
数据到A
表
中
update A a set a.A2 = (select b.B2 from B b where b.B1=a.A1) where
exists (select 1 from B where B.B1=a.A1)
update A a set a.A2 = (select b.B2 from B b, A c where b.B1=
在设计数据库
表
时,当有
关联
另外的
一张
表
时,我们会将另一个
表
的主键,以逗号分隔存在主
表
的一个
字段
里。
当用my
sql
数据库时,我们会使用find_in_set()函数,例:
select ys.id, group_concat(b.name)
from a
left join b on find_in_set(b.id, a.bids)
group bya.id
但是在
oracle
中
并没有find_in_set()函数,所以我们可以使用instr()函数。
select ys.id, wm_conc.
假设现在有两个
表
表
一:idnumsnamescore140643851小A87140643856小B88140643931小C92140643611小D77140643427小E81140643155小F95140643815小G78140643492小H90140643653小I71
表
二:idonameevent1001小a小a在2017-10-19通知了学号为140643851,1406438...
oracle
多
表
关联
查询和子查询一、多
表
关联
查询例子:
SQL
> create tablestudent1(sidvarchar(3),snamevarchar(6),sagenumber(3));Tablecreated.
SQL
> create tablecourse1(sidvarchar(3),cnamevarchar(8),cnonumber(3));Table created....
我的
Oracle
有个
表
a 由三个
字段
jiebie1,jiebie2,jiebie3, 还有等级
表
b
表
a jiebie1,jibie2,jibie3 1 2 3
表
b dengji mingcheng 0 不称职 1 基本称职 2 ...
表
连接查询
【小编用的是
Oracle
数据库,
Oracle
数据库区分
表
名与
字段
名的大小写,所以大家进行查询的时候记得注意双引号哟~】
有
表
表
名:AAA
字段
: id name tag
表
名:BBB
字段
: id ban qq
表
名:AABB
字段
: id area location分类:1.内连接 inner join select 列名 from 主
表
inner join 从
表
...
背景:A
表
、B
表
两
表
关联
,
关联
出来的结果里B
表
有不止一条,需求是只要B
表
结果
中
的某一条(按某
字段
排序)经过百度,发现row_number() over(partition by a order by b desc)函数可用(需要说明下,order by 必须有缺少会报错),以下是数据环境及结果。创建数据环境 create table A(ANAME varchar(20));insert int...