UNION vs. JOIN, b и c не определены?(Sqlite3) - PullRequest
0 голосов
/ 12 октября 2018
select city, prov, a, b, c from ( 
select count(city) as a, city, prov from locations left outer join rides on src=lcode 
group by city 
union 
select count(city) as b, city, prov from locations left outer join rides on dst=lcode 
group by city 
union
select count(city) as c, city, prov from locations l left outer join enroute e on l.lcode=e.lcode 
group by city 
) group by city;

Итак, я получил сообщение об ошибке «Нет такого столбца: b» (а также столбец c).Можно ли решить эту проблему, не меняя большую часть этого запроса?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Ваш подзапрос возвращает три столбца: a, city и prov.То есть для запроса union / union all имена столбцов берутся из первого подзапроса.Нет b или c.

Предположительно, вы хотите какой-то JOIN, а не UNION ALL.Однако ваш вопрос не объясняет, что вы пытаетесь сделать.И у него нет образцов данных или желаемых результатов.Итак, действительно трудно сказать, чего вы на самом деле хотите.

Мне кажется, что вы действительно хотите:

select city, prov, sum(a), sum(b), sum(c)
from ((select city, prov, count(city) as a, null as b, null as c
       from locations left outer join
            rides on src = lcode 
       group by city 
      ) union all
      (select city, prov, null, count(city), 0
       from locations left outer join
            rides
            on dst = lcode 
       group by city 
      ) union all
      (select city, prov, null, null, count(city) 
       from locations l left outer join
            enroute e
            on l.lcode = e.lcode 
       group by city 
      )
     ) abc
group by city;
0 голосов
/ 12 октября 2018

Выражения, которые не инкапсулированы в статистическую функцию и должны быть включены в предложение GROUP BY.Для объединений все операторы выбора в этих объединениях должны иметь одинаковые имена столбцов.Ниже будут выполнены необходимые задачи.

select * from ( 
select count(city) as cityCount, prov from locations left outer join rides on src=lcode 
group by prov
union 
select count(city) as cityCount, prov from locations left outer join rides on dst=lcode 
group by prov
union
select count(city) as cityCount,prov from locations l left outer join enroute e on l.lcode=e.lcode 
group by prov
);

Не требуется дополнительный групповой поток для внешнего подзапроса.Он уже будет сгруппирован по провинциям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...