Oracle SQL Developer находит конкретные данные из базы данных - PullRequest
0 голосов
/ 10 сентября 2018

Я хочу выбрать только те данные, которые только D LineType с одним документом из базы данных. У меня есть 2 таблицы в базе данных, и она должна быть связана с другой таблицей. Ниже приведены мои коды:

SELECT ID, DOC, LNTY
FROM Table1
WHERE LNTY='DF'
UNION 
SELECT ID, DOC, LNTY
FROM Table2 
WHERE LNTY='DF'

Моя база данных:

Table 1
Doc     LNTY
001     D
001     B
002     B
002     D
003     S
004     D
005     B
006     D

Table 2
Doc     LNTY
004     B
007     D
007     B
008     D

Ожидаемый результат:

Doc     LNTY
006     D
008     D

Мои коды не работали, потому что он будет отображать все D LineType, а не один документ с одним D LineType. Заранее благодарим за любую помощь.

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

Чтобы получить результат, который вы ищете, вы можете использовать:

SELECT MAX(DOC) AS DOC, 'D' AS LNTY
  FROM TABLE_1
  WHERE LNTY = 'D'
UNION ALL
SELECT MAX(DOC) AS DOC, 'D' AS LNTY
  FROM TABLE2
  WHERE LNTY = 'D'

SQLFiddle здесь

0 голосов
/ 11 сентября 2018

вы можете использовать rownum , для этого это обязательно сработает: -

create table ns_table1(
doc varchar(10),
lnty varchar(10));

create table ns_table2(
doc varchar(10),
lnty varchar(10));

insert into ns_table1 values('001','D');
insert into ns_table1 values('001','B');
insert into ns_table1 values('002','B');
insert into ns_table1 values('002','D');
insert into ns_table1 values('003','S');
insert into ns_table1 values('004','D');
insert into ns_table1 values('005','B');
insert into ns_table1 values('006','D');

insert into ns_table2 values('004','B');
insert into ns_table2 values('007','D');
insert into ns_table2 values('007','B');
insert into ns_table2 values('008','D');



select * from ns_table1 where rownum<=8 minus select * from ns_table1 where rownum<=7 union all  
select * from ns_table2 where rownum<=4 minus select * from ns_table2 where rownum<=3;
0 голосов
/ 10 сентября 2018

Вы можете использовать GROUP BY с UNION ALL:

select Doc, min(LNTY)
from table1 t1
group by Doc
having min(LNTY) = max(LNTY) and min(LNTY) = 'D'
union all
select Doc, min(LNTY)
from table2 t2
group by Doc
having min(LNTY) = max(LNTY) and min(LNTY) = 'D';

Я думаю, что этот код переполнен двумя group by с, поэтому я просто уменьшу его, чтобы отразить приведенные ниже разговоры:

select Doc, min(LNTY) LNTY
from (select Doc, LNTY
      from table1 t1
      union all
      select Doc, LNTY
      from table2 t2
     ) t
group by Doc
having min(LNTY) = max(LNTY) and min(LNTY) = 'D';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...