Oracle SQL запрос - получить значение столбца из альтернативной таблицы - PullRequest
0 голосов
/ 10 мая 2018

Я новичок в SQL и пытался найти ответы на форуме, но не смог их найти.

У меня есть 3 таблицы, из которых мне нужно получить данные.

Table 1:
ID* | Field 1 | Field 2 | 
1   | ABC     | XYZ



Table 2:
ID-FK from table 1 | Company - Vendor | Company - Supplier
1                  | 3                 | 2

Одна из значений компании может быть нулевой

Table 3 (Company table)
Company ID | Company name
1          | Company A
2          | Company B
3          | Company C

Требуемый вывод:

ID | Field 1 | Company - Vendor | Company - Supplier
1  | ABC     | Company C        | Company B

Внутреннее объединение, упомянутое в некоторых сообщениях, у меня не сработало (или я не знал, как это работает)

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вам, вероятно, нужно 2 левых соединения, чтобы получить компанию и поставщика, поэтому

drop table if exists table1,table2,table3;

create table table1(ID int, Field1 varchar(3), Field2 varchar(3)); 
insert into table1 values
(1   , 'ABC'     , 'XYZ');

create table Table2(IDFK int,  CompanyVendor int, CompanySupplier int);
insert into table2 values
(1                  , 3                 , 2),
(1                  , 3                 , null),
(1                  , null                , 2),
(1                  , 4                 , 5),
(1                  , 1                 , 2)
;

create table Table3 (CompanyID int, name varchar(20));
insert into table3 values
(1          , 'Company A'),
(2          , 'Company B'),
(3          , 'Company C');

Этот запрос

select t1.*,t2.companyvendor,t3.name Vendorname,
         t2.companysupplier,t4.name Suppliername
from table1 t1
join table2 t2 on t2.idfk = t1.id
left join table3 t3 on t3.CompanyID = t2.companyvendor
left join table3 t4 on t4.CompanyID = t2.companysupplier
;

Дает этот результат

+------+--------+--------+---------------+------------+-----------------+--------------+
| ID   | Field1 | Field2 | companyvendor | Vendorname | companysupplier | Suppliername |
+------+--------+--------+---------------+------------+-----------------+--------------+
|    1 | ABC    | XYZ    |             1 | Company A  |               2 | Company B    |
|    1 | ABC    | XYZ    |             3 | Company C  |               2 | Company B    |
|    1 | ABC    | XYZ    |          NULL | NULL       |               2 | Company B    |
|    1 | ABC    | XYZ    |             3 | Company C  |            NULL | NULL         |
|    1 | ABC    | XYZ    |             4 | NULL       |               5 | NULL         |
+------+--------+--------+---------------+------------+-----------------+--------------+
5 rows in set (0.00 sec)

Кстати, никогда не используйте дефис (-) в качестве имени сущности и не используйте пробелы.

0 голосов
/ 10 мая 2018
select  t1.ID,
    t1."Field 1",
    (select x."Company Name" from "Table 3" where "Company ID" = t2."Company - Vendor") as "Company - Vendor",
    (select x."Company Name" from "Table 3" where "Company ID" = t2."Company - Supplier") as "Company - Supplier"
from "Table 1" t1
   join "Table 2" t2 on t1.id = t2."ID-FK"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...