Oracle数据库单表自关联查询疑问
答案:5 悬赏:80 手机版
解决时间 2021-04-02 23:41
- 提问者网友:欲劫无渡
- 2021-04-02 12:03
Oracle数据库单表自关联查询疑问
最佳答案
- 五星知识达人网友:你哪知我潦倒为你
- 2021-04-02 12:29
select user_code,user_name,related_code from tablename t left join tablename s on t.user_code=s.related_code;
根据你提供的测试数据,输出结果还是这样,不变。
------------------------------------------------------
通过你补充了问题说明,我分析了下,程序如下:
SQL> select * from re_a;
USER_CODE USER_NAME RELATED_CODE
---------- -------------------------------- ------------
1001 张三 1002
1002 李四 1001
1003 王五 1004
1004 赵六 1003
SQL> select * from re_bak;
USER_CODE USER_NAME RELATED_CODE
---------- -------------------------------- ------------
SQL> exec pro_relation_baidu;
1001张三1002
1003王五1004
PL/SQL procedure successfully completed
SQL>create or replace procedure pro_relation_baidu IS
CURSOR cur_rea IS SELECT * FROM re_a;
CURSOR cur_bak IS SELECt * FROM re_bak;
--v_rea re_a%ROWTYPE;
j NUMBER;
BEGIN
DELETe re_bak;
FOR i IN cur_rea LOOP
SELECT COUNT(t.USER_CODE) INTO j FROM re_bak t WHERe
t.USER_CODE=i.RELATED_CODE AND t.RELATED_CODE=i.USER_CODE;
IF j=0 THEN
INSERT INTO re_bak VALUES(i.USER_CODE,i.USER_NAME,i.RELATED_CODE);
ELSE
NULL;
END IF;
END LOOP;
FOR i IN cur_bak LOOP
dbms_output.put_line(i.USER_CODE||i.USER_NAME||i.RELATED_CODE);
END LOOP;
end pro_relation_baidu;
根据你提供的测试数据,输出结果还是这样,不变。
------------------------------------------------------
通过你补充了问题说明,我分析了下,程序如下:
SQL> select * from re_a;
USER_CODE USER_NAME RELATED_CODE
---------- -------------------------------- ------------
1001 张三 1002
1002 李四 1001
1003 王五 1004
1004 赵六 1003
SQL> select * from re_bak;
USER_CODE USER_NAME RELATED_CODE
---------- -------------------------------- ------------
SQL> exec pro_relation_baidu;
1001张三1002
1003王五1004
PL/SQL procedure successfully completed
SQL>create or replace procedure pro_relation_baidu IS
CURSOR cur_rea IS SELECT * FROM re_a;
CURSOR cur_bak IS SELECt * FROM re_bak;
--v_rea re_a%ROWTYPE;
j NUMBER;
BEGIN
DELETe re_bak;
FOR i IN cur_rea LOOP
SELECT COUNT(t.USER_CODE) INTO j FROM re_bak t WHERe
t.USER_CODE=i.RELATED_CODE AND t.RELATED_CODE=i.USER_CODE;
IF j=0 THEN
INSERT INTO re_bak VALUES(i.USER_CODE,i.USER_NAME,i.RELATED_CODE);
ELSE
NULL;
END IF;
END LOOP;
FOR i IN cur_bak LOOP
dbms_output.put_line(i.USER_CODE||i.USER_NAME||i.RELATED_CODE);
END LOOP;
end pro_relation_baidu;
全部回答
- 1楼网友:摆渡翁
- 2021-04-02 16:19
左连接
left
left
- 2楼网友:妄饮晩冬酒
- 2021-04-02 14:56
select a.* from user a left outer join user b on a.user_code=b.user_code;(不知道你此处的表主键是不是user_code) 是的那就是 on a.user_code=b.user_code; 如果是别的就把on 后面换成别的主键关联就行了。
- 3楼网友:空山清雨
- 2021-04-02 14:09
你是想在查询的结果集中related_code列也显示用户的名字而不是ID?
user_code为用户ID,user_name为用户姓名,related_code直接上级或说领导
查询结果中显示:用户ID,用户姓名,直接上级(其实也是用户姓名)。
user_code为用户ID,user_name为用户姓名,related_code直接上级或说领导
查询结果中显示:用户ID,用户姓名,直接上级(其实也是用户姓名)。
- 4楼网友:野慌
- 2021-04-02 13:01
select * from nls_session_parameters查看一下你的NLS_DATE_FORMAT等的一些参数,截图贴一下
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯