Внешнее соединение в MYsql Qyery - PullRequest
0 голосов
/ 31 марта 2012

У меня есть следующий запрос MYsql и попытка правого внешнего соединения, но я не могу понять, как это сделать

вот запрос любой помощи

select lp_des.lpname,today.cnt_veh_tdy,todate.cnt_veh_tdate
from
(select distinct registration.lpcode,loadingpoint.lpname 
from registration,loadingpoint
where registration.lpcode=loadingpoint.lpcode) lp_des,
(select lpcode,count(vehicleno) cnt_veh_tdate
from registration
where registration.companycode='01'
group by lpcode) todate,
(
select lpcode,count(vehicleno) cnt_veh_tdy
from registration
where registration.companycode='01'
and registration.date=(select max(date) from registration)
group by lpcode) today
right outer join today on lp_des.lpcode = today.lpcode
right outer join todate on lp_des.lpcode = todate.lpcode

Я хочу сделать правильное внешнее соединение в этой части

where lp_des.lpcode=todate.lpcode
and   lp_des.lpcode=today.lpcode

Пожалуйста, помогите и спасибо заранее

Ответы [ 2 ]

0 голосов
/ 31 марта 2012

Вы просили об этом:

select 
  lp_des.lpname,
  today.cnt_veh_tdy,
  todate.cnt_veh_tdate
from
  (select distinct 
    r.lpcode,
    l.lpname 
  from 
    registration r
    inner join loadingpoint l on l.lpcode = r.lpcode) lp_des
  right join
    (select 
      r.lpcode,
      count(r.vehicleno) cnt_veh_tdate
    from 
      registration r
    where 
      r.companycode='01'
    group by 
      lpcode) todate on todate.lpcode = lp_des.lpcode
  right join
    (select 
      r.lpcode,
      count(r.vehicleno) cnt_veh_tdy
    from 
      registration r
    where 
      r.companycode = '01'
      and registration.date = (select max(date) from registration)
    group by 
      r.lpcode) today on today.lpcode = lp_des.lpcode

Но я думаю, что вы имеете в виду это:

select
  r.lpcode,
  l.lpname,
  count(r.vehicleno) cnt_veh_tdate,
  count(case when r.date = md.date then r.vehicleno else null end) cnt_veh_tdy
from
  registration r
  inner join (select max(rm.date) maxdate from registration rm) md
  left join loadingpoint l on l.lpcode = r.lpcode
where
  r.companycode = '01'
group by 
  r.lpcode

и, может быть, даже это:

select
  r.lpcode,
  l.lpname,
  count(r.vehicleno) cnt_veh_tdate,
  count(case when r.date = date() then r.vehicleno else null end) cnt_veh_tdy
from
  registration r
  left join loadingpoint l on l.lpcode = r.lpcode
where
  r.companycode = '01'
group by 
  r.lpcode

Если я правильно прочитал, вам нужен запрос, который возвращает количество автомобилей для компании 1, назначенных точке погрузки, как в целом, так и только на сегодняшний день. И вы также хотите, чтобы это количество для транспортных средств, которым еще не назначена точка загрузки. Хотя было бы полезно, если бы you добавил бы это описание. Это поможет тем, кто отвечает на ваш вопрос, но также поможет вам правильно написать правильный запрос.

0 голосов
/ 31 марта 2012

Синтаксис для правого внешнего объединения:

SELECT t1.id, t2.id FROM t1 RIGHT OUTER JOIN t2 ON t1.field1 = t2.field2

Если вы объединяетесь в одном поле, вы можете использовать USING вместо ON:

SELECT t1.id, t2.id FROM t1 RIGHT OUTER JOIN t2 USING (field)
...