SQL получает несколько строк в частности SQL - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть таблица abc со следующими строками:

emp_id_role     Group_name              Role_name       Location_id
 12              Insurance              Manager            Noida
 12              Insurance              Senior Manager     Noida
 13       Global Client Services            Sw               UP
 14       Operations Management         All Jobs           kERALA

и другая главная таблица со всеми деталями employee_xyz:

PERSON_ID   NAME        DOB     START_DATE      END_DATE        SSN
  12        DEAN    01-JAN-1990 01-JAN-2017     20-JAN-2017     847474
  12        DEAN    01-JAN-1990 21-JAN-2017     03-mar-2018     847474
  12        DEAN    01-JAN-1990 04-mar2018      31-DEC-4712     847474
  13        SAM     20-JAN-1990 17-JAN-2016     20-JAN-2017     847474
  13        SAM     20-JAN-1990 21-JAN-2017     31-DEC-4712     847474
  14        JAY     29-dec-1990 21-JAN-2016     31-DEC-4712     847474

Я хочу получить полнуюимена из таблицы employee_xyz для записей в таблице abc.

Когда я соединяю эти два с помощью приведенных ниже запросов, я получаю больше количества строк для сотрудника, чем в таблице abc,

Например: для employee_id 12 я должен получить 2 строки, как в таблице abc, но я как-то получаю 9 строк ...

Использовать запрос очень просто:

select * from table_abc abc,
employee_xyz xyz
where xyz.person_id=abc.emp_id_role
and trunc(sysdate) between abc.Start_date and xyz.end_date
and person_id=12;

1 Ответ

0 голосов
/ 28 декабря 2018

Полагаю, вы хотите выбрать все столбцы из table_abc с именами из employee_xyz.

Если вы попытаетесь использовать select abc.*, xyz.name, вы уже можете выбрать две строки, поскольку sysdate для person_id = 12 остается в интервале только для третьей строки ( start_date:04-mar2018 / end_date: 31-DEC-4712 ), но если вы хотите, чтобы не повторялись даже при сохранении большего количества значений даты, вы можете использовать другое: select distinct abc.*, xyz.name, как показано ниже (, где есть две строки вдата окончания второй строки интервала, преобразованная из «2018-03-03» в «2019-03-03» ):

with table_abc(emp_id_role, Group_name, Role_name, Location_id) as
(
 select 12,'Insurance','Manager','Noida' from dual union all
 select 12,'Insurance','Senior Manager','Noida' from dual union all
 select 13,'Global Client Services','Sw', 'UP' from dual union all
 select 14,'Operations Management','All Jobs','kERALA' from dual
),
    employee_xyz(person_id,name, dob, start_date, end_date, ssn) as
(
 select 12,'DEAN',date'1990-01-01',date'2017-01-01',date'2017-01-20',847474 from dual union all        
 select 12,'DEAN',date'1990-01-01',date'2017-01-21',date'2019-03-03',847474 from dual union all        
 select 12,'DEAN',date'1990-01-01',date'2018-03-04',date'4712-12-31',847474 from dual      
)
select distinct abc.*, xyz.name
  from table_abc abc join employee_xyz xyz
    on xyz.person_id = abc.emp_id_role
 where trunc(sysdate) between xyz.Start_date and xyz.end_date
   and person_id = 12;

EMP_ID_ROLE GROUP_NAME  ROLE_NAME         LOCATION_ID  NAME
----------- ----------  ---------------  -----------   -----
12          Insurance   Manager           Noida        DEAN
12          Insurance   Senior Manager    Noida        DEAN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...