SQL显示数据未映射到另一个表中

时间:2015-04-30 06:29:53

标签: sql oracle

我正在寻找一个结果查询,我只能看到userid1数据的提供者未映射到Table 2;这是我的表定义和数据;

Table 1

userid  providerid 
1         101    
1         104    
1         106  
1         107
2         102 
2         103
2         104

Table 2

providerid 
101
102
103
104
105
106
107
108
109
110

根据o / p查询: -

userid    providernotavailable
1         102
1         103
1         105
1         108
1         109
1         110
2         101
2         105
2         106
2         107
2         108
2         109
2         110

5 个答案:

答案 0 :(得分:0)

您可以使用r20.rb:22: warning: toplevel constant M1 referenced by MyClass::M1 M1::A 13996360 module M1 class A method fun() r20.rb:27: warning: toplevel constant M2 referenced by MyClass::M2 M2::A 13996120 module M2 class A method fun() 运算符:

not in

答案 1 :(得分:0)

多个版本:拳头NOT IN

SELECT table1.*
  FROM table1
 WHERE table1.providerId NOT IN ( SELECT table2.providerId FROM table2 )

第二位NOT EXISTS

SELECT table1.*
  FROM table1
 WHERE NOT EXISTS ( SELECT 1
                      FROM table2
                     WHERE table1.providerId = table2.providerId )

下一个有点奇怪:我们做LEFT JOIN我们检查第二个表是否匹配:

SELECT table1.*
  FROM table1
       LEFT JOIN table2
       ON table1.providerId = table2.providerId
 WHERE table2.providerId IS NULL

上述三个版本中哪一个表现更好取决于(大部分)两个表的基数。

答案 2 :(得分:0)

对不起,我误解了这个问题。这应该可以解决问题。 查询的第一部分选择所有对userId - providerId。第二部分删除table1中的所有内容。

SELECT U.userId, P.providerId
  FROM (SELECT DISTINCT table1.userId FROM table1) U, table2 P
 MINUS
SELECT table1.* FROM table1

答案 3 :(得分:0)

修改

这是我用来获取输出的表结构

SQL> desc tab1
 Name                         Null?    Type
 ---------------------------- -------- ----------------
 USERID                                NUMBER(38)
 PROVIDERID                            NUMBER(38)

SQL> desc tab2
 Name                         Null?    Type
 ---------------------------- -------- ----------------
 PROVIDERID                            NUMBER(38)


    SQL>   select distinct(a.userid),b.providerId from tab1 a, tab2 b
     minus
     select  * from tab1 ;

    USERID PROVIDERID
---------- ----------
         1        102
         1        103
         1        105
         1        108
         1        109
         1        110
         2        101
         2        105
         2        106
         2        107
         2        108
         2        109
         2        110

13 rows selected.

答案 4 :(得分:0)

SELECT a.userid, b.providerid FROM table1 a, table2 b
WHERE a.providerid IS NOT NULL
MINUS
SELECT userid, providerid FROM table1 a
WHERE a.providerid IS NOT NULL;

查询带来所需的输出... 谢谢大家的努力。