暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 比较两个表中的匹配重结晶,并对每行返回真或假

askTom 2018-06-18
378

问题描述

亲爱的汤姆

很抱歉,如果以前已经解决了这个问题,我是ORACLE SQL的完整初学者,将感谢您的帮助。

我有两个表表A和表B。

表A有大约60,000行客户数据,客户Id作为主标识符。但是,客户id不是唯一的,并且一个客户可能有多个记录。

表B有一列有超过500,000个唯一客户id,这些是唯一id。

我需要的是以下帮助:

从表A中查看客户Id,然后在表B中搜索以查看该客户Id是否存在。如果是这样,则在TableA.Customer_exists列中插入yes (或True),如果不是,则在TableA.Customer_exists中插入No (或False)。这应该遍历表A中的所有条目,即使我在表A中有多个id,tableA-Customer_exists列中也会有多个Y或N

提前谢谢你,一步一步的代码将不胜感激,因为我只是在学习SQL


专家解答

合并应该解决大部分问题

SQL> create table ta ( id int, cust int, yes_or_no varchar2(1) );

Table created.

SQL> create table tb ( cust int primary key ) ;

Table created.

SQL>
SQL> insert into ta
  2  select rownum, dbms_random.value(1,500000), null
  3  from dual
  4  connect by level <= 60000;

60000 rows created.

SQL>
SQL> insert into tb
  2  select rownum*2
  3  from dual
  4  connect by level <= 500000;

500000 rows created.

SQL>
SQL> commit;

Commit complete.

SQL>
SQL>
SQL> merge into ta
  2  using ( select * from tb ) b
  3  on ( ta.cust = b.cust )
  4  when matched then
  5   update set yes_or_no = 'Y';

30057 rows merged.

SQL>
SQL> update ta set yes_or_no = 'N' where yes_or_no is null;

29943 rows updated.

SQL>
SQL> select * from ta where rownum < 50;

        ID       CUST Y
---------- ---------- -
      2087     179958 Y
      2088     275279 N
      2089     187087 N
      2090      34816 Y
      2091     444243 N
      2092     468718 Y
      2093     325392 Y
      2094     397626 Y
      2095     253285 N
      2096      43035 N
      2097     168041 N
      2098     216580 Y
      2099      76296 Y
      2100     281676 Y
      2101     173866 Y
      2102      91198 Y
      2103     322284 Y
      2104     290060 Y
      2105     315403 N
      2106     423184 Y
      2107     386996 Y
      2108      32697 N
      2109     316326 Y
      2110     320719 N
      2111     438909 N
      2112     427618 Y
      2113      80531 N
      2114     131810 Y
      2115     104332 Y
      2116     122527 N
      2117     330385 N
      2118      61493 N
      2119      78733 N
      2120      17073 N
...
...


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论