Как получить все записи с JOIN? - PullRequest
0 голосов
/ 13 октября 2011

Есть моя проблема:

enter code here

У меня есть таблица с именем test, которая выглядит следующим образом

id|  service  |   sub service  | Qt  |   date

1 | service_1 | sub_service_11 |  3  | 2011-12-03
2 | service_1 | sub_service_12 |  6  | 2011-12-03
3 | service_1 | sub_service_13 |  4  | 2011-12-03

Позже у меня есть таблица datedim, которая выглядит следующим образом

id|   date 

1 | 2011-12-01
2 | 2011-12-02
3 | 2011-12-03
4 | 2011-12-04
5 | 2011-12-05

Я пытаюсь сделать так, чтобы для каждого sub_service возвращалась вся дата из datedim, даже если совпадений нет.

Так что, в принципе, что-то похожее на это

sub_service_11 | 2011-12-01 | NULL
sub_service_11 | 2011-12-02 | NULL
sub_service_11 | 2011-12-03 | 3
sub_service_11 | 2011-12-04 | NULL
sub_service_11 | 2011-12-05 | NULL
sub_service_12 | 2011-12-01 | NULL
sub_service_12 | 2011-12-02 | NULL
sub_service_12 | 2011-12-03 | 6
sub_service_12 | 2011-12-04 | NULL
sub_service_12 | 2011-12-05 | NULL
sub_service_13 | 2011-12-01 | NULL
sub_service_13 | 2011-12-02 | NULL
sub_service_13 | 2011-12-03 | 4
sub_service_13 | 2011-12-04 | NULL
sub_service_13 | 2011-12-05 | NULL

Я попробовал ПРАВИЛЬНОЕ СОЕДИНЕНИЕ, СОЮЗЫ и прочее, но не могу понять.

Кто-нибудь знает, как мне это сделать?

Спасибо,

Ответы [ 3 ]

1 голос
/ 13 октября 2011

Это то, что вам нужно:

select 
  ss.sub_service, 
  dd.date,
  ts.qt
from 
  (datedim dd, (select distinct sub_service from test) ss)
 left join test ts on (dd.date = ts.date and ts.sub_service = ss.sub_service)
order by ss.sub_service, dd.date
0 голосов
/ 13 октября 2011

вы можете сделать это:

select t.id, sub_service, case when d.date = t.date then qt else null end as qt
from test t cross join datedim d 
order by sub_service, d.date
0 голосов
/ 13 октября 2011

Поскольку у вас есть таблица, содержащая каждый sub_service (давайте назовем его sub_service_list), вы сможете сделать следующее:

SELECT
s.sub_service, d.date, t.Qt
FROM (sub_service_list s,datedim d) 
LEFT JOIN test t ON s.sub_service=t.sub_service AND d.date=t.date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...