Oracle数据库单表自关联查询疑问 20

User表:列:user_code,user_name,related_code数据:1001张三10021002李四10011003王五10041004赵六1003..... User表:

列:user_code,user_name,related_code
数据:
1001 张三 1002
1002 李四 1001
1003 王五 1004
1004 赵六 1003
...
即用户A对用户B,反过来也对应,现在想要查出A对B的就OK,过滤掉B对A的数据,不知道描述的详细不详细,求解答,谢谢!
看来没描述清楚,自关联查询我知道。
上面是正常的查询数据,现在我只想要
1001 张三 1002

1003 王五 1004

这样的数据,因为1001跟1002关联,我就没必要再知道1002跟1001也是关联的,这是前提,求解答!!!T _ T
展开
 我来答
sunny521131421
推荐于2018-03-14 · TA获得超过202个赞
知道小有建树答主
回答量:185
采纳率:0%
帮助的人:139万
展开全部

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
/*CREATE TABLE re_a(user_code NUMBER,user_name VARCHAR(32),related_code NUMBER);
INSERT INTO RE_A VALUES ('1001', '张三', '1002');
INSERT INTO RE_A VALUES ('1002', '李四', '1001');
INSERT INTO RE_A VALUES ('1003', '王五', '1004');
INSERT INTO RE_A VALUES ('1004', '赵六', '1003');
SELECT * FROM re_a;
create table re_bak as select * from re_a where 1=2;*/
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;
IT民工之心飞翔
2013-10-21
知道答主
回答量:5
采纳率:0%
帮助的人:7335
展开全部
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 后面换成别的主键关联就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
海影幻
2021-04-01 · TA获得超过230个赞
知道小有建树答主
回答量:198
采纳率:75%
帮助的人:55.6万
展开全部

时隔多年看到这个问题,好奇研究了下,话不多说,请看语句:

SELECT * FROM T_TEST_A C

WHERE C.A IN (
SELECT MIN(TT.AA) FROM (
SELECT T.A1 AA,MAX(T.B1) BB FROM (
SELECT A.A A1,A.B B1 FROM T_TEST_A A
UNION ALL
SELECT B.C A1,B.B B1 FROM T_TEST_A B
) T
GROUP BY T.A1
) TT
GROUP BY TT.BB
)

截图

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wjvogue
2016-06-02
知道答主
回答量:1
采纳率:0%
帮助的人:1164
展开全部
你是想在查询的结果集中related_code列也显示用户的名字而不是ID?
user_code为用户ID,user_name为用户姓名,related_code直接上级或说领导
查询结果中显示:用户ID,用户姓名,直接上级(其实也是用户姓名)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
芳汐剑之觉1c
2017-07-05 · TA获得超过123个赞
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:35.2万
展开全部
select * from nls_session_parameters查看一下你的NLS_DATE_FORMAT等的一些参数,截图贴一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式