Отображение соответствующих данных из таблицы пересечений 2 других таблиц - PullRequest
0 голосов
/ 17 ноября 2018

Извините за трудности в описании контекста в заголовке.Моя ситуация такова, что имея 3 таблицы

T1

A|B
1|xyz
2|www
3|abc
4|ppp
5|iuy

T2

A|C 
1|1 
1|2 
2|3 
2|4 
3|5 
4|6
5|7 
5|8 

T3

C| D |E
1|dfg|NULL
2|jhg|1
3|bnm|NULL
4|lpo|NULL
5|tyu|NULL
6|qrt|2
7|bet|3
8|dsf|4

Цель запроса состоит в том, чтобыshow B с соответствующим ему D при условии t2.A должно иметь как минимум 1 соответствующее значение C, чтобы оно не было NULL в его значении E

У меня возникают трудности с отображением C с нулевым значением, хотя на самом деле это должно бытьвключается, когда условие A совпадает на всем изображении, состоящим из другого ненулевого C, что делает A допустимым результатом.

При указанных условиях желаемое A должно быть 1, 4, 5 ичтобы показать соответствующий ему B со ВСЕМ D желаемого A из отношения с C в t2.

A2 и A3 нежелательны, так как все их соответствующие E для C равны нулю, и что я хочу иметь, это то, что вминимум 1 из E содержит значение.

Требуемый результат должен быть

 B | D
xyz|dfg
xyz|jhg
ppp|qrt
iuy|bet
iuy|dsf

Я надеюсь, что кто-то поймет.

Ответы [ 3 ]

0 голосов
/ 17 ноября 2018

Можете ли вы попробовать этот запрос, пожалуйста:

select T1.B, T3.D from T1 inner join T2 on 
T1.A =T2.A 
inner join T3 on T2.C = T3.C

Этот запрос соответствует вашему выводу, показанному выше. Но если бы вы были не NULL Вы должны добавить к запросу:

and T3.E is not NULL

Надеюсь, это поможет вам.

0 голосов
/ 17 ноября 2018
SELECT B, D
FROM t2
JOIN t1 ON t1.A = t2.A
JOIN t3 ON t3.C = t2.C
WHERE t2.A IN(SELECT A
FROM t2 JOIN t3 ON t3.C = t2.C
GROUP BY A
HAVING COUNT(E) >= 1)

или использование этого в качестве альтернативы для COUNT(E) >=1 или COUNT(E) >0

SUM(CASE WHEN registration_number IS NOT NULL THEN 1 ELSE 0 END) > 0)

Это как-то сработало для меня

Однако кто-нибудь может объяснить, является ли COUNT(E) >=1 илиCOUNT(E) >0 лучше для выражения, и какой путь (число против суммы логический) будет более эффективным?

0 голосов
/ 17 ноября 2018

Мне сложно ответить на этот вопрос, но если я правильно понимаю, вам нужен какой-то пункт exists:

select t2.b, t3.d
from t1 join
     t2
     on t1.a = t2.a join
     t3
     on t3.c = t2.c
where exists (select 1
              from t2 tt2 join
                   t3 tt3
                   on tt2.c = tt3.c
              where t2.a = t1.a and t3.e is not null
             );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...