Соединение с Sqlite (или какой-либо его вариант)

#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 , вероятно, его съедают, потому что я получаю уведомления обо всех комментариях к моим ответам.