Как я могу запросить данные из одной таблицы, используя несколько условий и ища значение в другой таблице - PullRequest
1 голос
/ 16 октября 2019

У меня есть три таблицы ORACLE SQL, где я должен запросить DATA_TABLE и получить dataid , чей attr равен 2000, а значение равно cat, а также значение для attr = 2001 должно быть доступно в столбце NAME_TABLE oldname , и мне нужно отобразить Имя из DOC_TABLE (используя dataid's , который мы получили сверху) и код из Name_Table

Tables with Sample data

Из приведенной выше таблицы мой вывод должен быть

Имя , Код

FirstName, DG

Поскольку dataid 1 в DATA_TABLE для attr 2000, его значение равно Cat и для attr 2001его значение - dog, которое доступно в столбце NAME_TABLE oldname, As Name, где dataid = 1 в DOC_TABLE - FirstName, а код для собаки в NAME_TABLE - DG

.

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Вы можете использовать analytical function следующим образом:

Select distinct name, code from
(select do.name, na.code,
Count(case when da.value='cat' and da.attr=2000 then 1 end) 
Over (Partition by do.dataid) as cat_cnt,
Count(case when na.code is not null and da.attr=2001 then 1 end) 
Over (Partition by do.dataid) as code_cnt
from doc_table do
Left join data_table da on da.dataid = do.dataid
Left join name_table na on na.oldname = da.value)
Where cat_cnt > 0 and code_count > 0;

Ура !!

0 голосов
/ 16 октября 2019

Я бы сформулировал ваш запрос следующим образом:

select do.name, na.code

-- start the join here
from doc_table do

-- pull dataid's from DATA_TABLE whose attr is 2000 and value is cat
inner join data_table da on da.dataid = do.dataid and da.attr = 2000 and da.value = 'cat'

-- pull code from NAME_TABLE
inner join name_table na on na.oldname = da.value

-- the value for attr = 2001 has to be available in NAME_TABLE
where exists(
    select 1
    from data_table da1
    inner join name_table na1 on na1.oldname = da1.value
    where da1.dataid = do.dataid and da1.attr = 2001
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...