【问题标题】:Extracting rows from a Table which fit conditions referring to another Table in Oracle SQL从表中提取符合条件的行引用 Oracle SQL 中的另一个表
【发布时间】:2011-09-12 12:12:28
【问题描述】:

我有 2 张桌子。我想提取表 2 中满足表 1 中某些条件的每个 TB2_ID。因此,在下面的情况下,我们将提取“2”,因为它完全由表 1 中的 ID“1”和“15”满足。 TB2_ID '4' 不会被提取,因为没有 TB1_ID 完全满足它(即如果 TB1_ID '16' 也有条件 10,那么 TB2_ID '4' 将被提取)。我正在使用 Oracle SQL 10g。

表 1 如下所示:

TB1_ID    |  Condition
______________________

   1      |      10
   1      |      11
   1      |      12
   5      |      10
   5      |      11
   15     |      10
   15     |      11
   15     |      12
   16     |      11
   16     |      14

表 2 如下所示:

 TB2_ID   |    Condition
 _______________________

   2      |       10
   2      |       11
   2      |       12
   4      |       10
   4      |       14

【问题讨论】:

    标签: sql oracle oracle10g


    【解决方案1】:

    这可以最简单地指定为:查找表 1 中满足的任何 TB2_ID:

    SELECT DISTINCT TB2_ID
    FROM table2 t2
    left join table1 t1 on t1.TB1_ID = t2.TB2_ID and t1.Condition = t2.Condition
    where t1.TB1_ID is null;
    

    【讨论】:

      【解决方案2】:
      SELECT  TABLE2.TB2_ID FROM TABLE1 , TABLE2 
      WHERE TABLE2.CONDITION = TABLE1.CONDITION
      GROUP BY TABLE2.TB2_ID
      HAVING COUNT(TABLE2.TB2_ID) > 1;
      

      【讨论】:

      • 您好,感谢您的回复,但我正在寻找 TABLE1 满足所有 TABLE2.CONDITIONS 的位置,使用 TABLE1_ID 作为约束。我已经编辑了上面的帖子以反映这一点。
      • 它有效。谢谢。不过,您是否知道一种为此获得通用解决方案的方法? IE。如果我们不知道计数。
      • 这个不起作用,因为它没有考虑到 id 也必须匹配。
      【解决方案3】:

      更新 - 简化:
      试试

      SELECT DISTINCT A.TB2_ID FROM
      (SELECT TB2_ID, COUNT(*) C FROM TABLE2 T2) A,
      (SELECT TB1_ID, COUNT(*) C FROM TABLE1 T1) B
      WHERE
      A.C <= (SELECT COUNT(*) FROM TABLE1 T1, TABLE2 T2 WHERE T1.CONDITION = T2.CONDITION AND T2.TB2_ID = A.TB2_ID AND T1.TB1_ID = B.TB1_ID) AND
      A.C <= B.C
      

      【讨论】:

        猜你喜欢
        • 2023-04-07
        • 2021-11-15
        • 1970-01-01
        • 2012-02-27
        • 1970-01-01
        • 1970-01-01
        • 2013-01-06
        • 1970-01-01
        • 2022-10-13
        相关资源
        最近更新 更多