Извлечение строк из таблицы, которые соответствуют условиям, ссылающимся на другую таблицу в Oracle SQL - PullRequest
1 голос
/ 12 сентября 2011

У меня есть 2 таблицы. Я хочу извлечь каждый TB2_ID в Таблице 2, для которого определенные условия выполняются в Таблице 1. Таким образом, в случае ниже, мы извлекли бы «2», так как он ПОЛНОСТЬЮ удовлетворяется как ID «1», так и «15» в Таблице 1. 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

Ответы [ 3 ]

0 голосов
/ 12 сентября 2011

Это проще всего определить как: Найти любой TB2_ID, который не удовлетворен в таблице 1:

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;
0 голосов
/ 12 сентября 2011

ОБНОВЛЕНИЕ - упрощено: попробуйте

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
0 голосов
/ 12 сентября 2011
SELECT  TABLE2.TB2_ID FROM TABLE1 , TABLE2 
WHERE TABLE2.CONDITION = TABLE1.CONDITION
GROUP BY TABLE2.TB2_ID
HAVING COUNT(TABLE2.TB2_ID) > 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...