#sql #sqlite #join
#sql #sqlite #Присоединиться
Вопрос:
Учитывая результирующий набор, подобный этому:
Col1 Col2
============
BAML 491
BARC 362
BDPT 1
BNP 9
(выберите Col1, посчитайте (some_col) как Col2 из таблицы, где another_col=’someCondition» группируется по Col1)
и еще один подобный:
Col3 Col2
============
BAML 494
BARC 366
BDPT 1
BNP 10
CALY 3
(выберите Col3, посчитайте (some_col) как Col2 из таблицы, где another_col=’someothercol» группируется по Col3)
Как мне «объединить» эти два запроса для формирования:
BAML 491 494
BARC 362 366
BDPT 1 1
BNP 9 10
CALY 3
Пожалуйста, обратите внимание, что первые два запроса работают с одной и той же таблицей. Я вижу, что здесь помогает какой-то вариант соединения (не так много работал с sql). Я просто не могу понять, как объединить эти два запроса в один запрос, чтобы получить объединенный reusltset.
Ответ №1:
Попробуйте это:
select b.col1, b.col2, a.col2
from (
select Col3, count(some_col) as Col2
from Table
where another_col = 'SomeOTHERCondition'
group by Col3
) as a
left outer join (
select Col1, count(some_col) as Col2
from Table
where another_col = 'SomeCondition'
group by Col1
) as b
on a.col3 = b.col1
Я не уверен, поддерживает ли это SQLite.
Основываясь на комментариях, приведенное выше работает, но вам действительно нужно ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ, а SQLite это не нравится. Вы могли бы попробовать подделать его с помощью двух ЛЕВЫХ ВНЕШНИХ соединений и ОБЪЕДИНЕНИЯ, хотя:
select b.col1, b.col2, a.col2
from ... as a left outer join ... as b ...
UNION
select b.col1, b.col2, a.col2
from ... as b left outer join ... as a ...
Комментарии:
1. этот монстр работает как шарм! 🙂 единственная проблема в том, что в правой таблице отсутствуют записи, которые не удовлетворяют критериям объединения с левой таблицей. Мне действительно нужно полное внешнее соединение? потому что я хочу, чтобы также были включены несоответствующие строки.
2. @Dilip: Да, вам может понадобиться полное внешнее соединение, вы должны иметь возможность заменить «left» на «full».
3. К счастью для меня, Sqlite не поддерживает ни правильные, ни полные внешние соединения! Grr .. (кстати, когда я начинаю свои комментарии с «@mu:», чтобы обратиться к вам, эта часть съедается, и отображаются только мои комментарии. почему?)
4. @Dilip: вы могли бы использовать ОБЪЕДИНЕНИЕ двух ЛЕВЫХ соединений, чтобы подделать ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ. И
@mu
, вероятно, его съедают, потому что я получаю уведомления обо всех комментариях к моим ответам.