oracle中,如果a表跟b表关联查询的问题

oracle中,如果a表跟b表关联查询的问题,第1张

可以的,利用oracle的分析函数ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2) 来实现。举例如下:

1、数据准备:

--创建A表

CREATE TABLE qh_a (

filed1 Varchar2(3),

filed2 CHAR(1)

);

--创建B表

CREATE TABLE qh_b (

filed1 CHAR(1),

filed2 VARCHAR(3)

);

--初始化A表与B表的数据。

INSERT INTO qh_a VALUES('001','x');

INSERT INTO qh_a VALUES('002','y');

INSERT INTO qh_b VALUES('x','aaa');

INSERT INTO qh_b VALUES('x','bbb');

INSERT INTO qh_b VALUES('y','ccc');

INSERT INTO qh_b VALUES('y','ddd');

2、查询语句

SELECT CASE

WHEN ROW_NUMBER() OVER(PARTITION BY AFILED2 ORDER BY BFILED2) = 1 THEN  AFILED1 ELSE '' END FILED1,

AFILED2,

BFILED2

FROM QH_A A, QH_B B

WHERE AFILED2 = BFILED1

3、结果如下图所示:

SQL如下
select a
from test1 a
where aname like (select bid from test2 b where rownum = 1)||'%'
希望能帮到你。

第一种查询的语法不全吧,如果补齐了的话,就是先连接的要写到子查询中。
如果理解没错的话,看着觉得应该效果一样。
是这样吗?
SELECT FROM (select from (select from 表1 LEFT JOIN 表2 ON 表1关联表2条件) 表11 LEFT JOIN 表3 ON 表3关联表11条件) 表111 LEFT JOIN 表4 ON 表111关联表4条件 LEFT JOIN 表5 ON 表111关联表5条件 where ……

两种方法:
-- 方法1
UPDATE  表2
SET
  表2C  =  (SELECT  B  FROM  表1  WHERE   表1A = 表2A)
WHERE
  EXISTS ( SELECT 1 FROM   表1  WHERE   表1A = 表2A)
  
-- 方法2
MERGE INTO 表2 
USING 表1
ON ( 表2A = 表1A )    -- 条件是 A 相同
WHEN MATCHED THEN UPDATE SET 表2C = 表1B   -- 匹配的时候,更新

1、创建测试表;

create table company(companyId number, companyName varchar2(20), contacts varchar2(20));

create table users(userId number, companyId number, userName varchar2(20), userAge number, address varchar2(20));

2、插入测试数据;

insert into company values (1,'腾讯科技','马化腾');

insert into company values (2,'微软公司','鲍威尔');

insert into company values (3,'新浪科技','小明' );

insert into users values (1,1,'jack',23 , '上海');

insert into users values (2,1,'jack2', 23, '上海');

insert into users values (3,2,'jack3', 23, '上海');

insert into users values (4,2,'jack4', 23, '上海');

insert into users values (5,3,'jack5', 23, '上海');

insert into users values (6,3,'jack6', 23, '上海');

3、查询表中数据;

select from users;

4、编写sql,关联两张表;select from users t , company b where tcompanyid = bcompanyid and tcompanyid = 1;

select from a where not exists (select 1 from b where aurl_cd=bcode_id and bcode_type='adadf') and auser_id='aaa'

表a有“职工姓名”、“单位编号”的字段,
表b中有“单位编号”和“单位名称”的字段,
新建表c “职工姓名”、“人员类别”

select a, b单位名称,c人员类别 from 表a as a
left join 表b as b on ( a"单位编号”=b“单位编号”)
left join 表c as c on ( a“职工姓名"=c“职工姓名" )
这样试试吧


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13401934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-29
下一篇 2023-07-29

发表评论

登录后才能评论

评论列表(0条)

保存