2012-01-10 2 views
-1

Я использую SQLITE, и я столкнулся с ситуацией, для которой я не смог найти какой-либо запрос.Пожалуйста, введите запрос для этого случая

Пожалуйста, введите запрос на этот случай.

Таблица - A:

Name Class RollNo 

ab  2  1 
bc  2  2 
cd  2  3 

Таблица - B:

Sport Grade RollNo 

wx  A  2 
xy  B  3 
yz  C  4 
zz  D  5 

Давайте предположим, что эти две таблицы ..

мне нужен запрос, который возвращает нижеследующая таблица:

Name Class RollNo Sport Grade 

ab  2  1  
bc  2  2  wx  A 
cd  2  3  xy  B 
      4  yz  C 
      5  zz  D 

Надеюсь, вы поняли, что я имел в виду под последней таблицей; все номера рулонов должны присутствовать в таблице результатов ...........

И еще один раз я использую SQLITE.

+0

Вы должны использовать FULL OUTER JOIN. Но я не уверен, существует ли он в sqllite. – Baatar

ответ

0

Вы в основном хотите выполнить команду FULL OUTER JOIN, которая не поддерживается непосредственно в SQLLITE, но вы можете добиться такого же эффекта, используя UNION'd LEFT JOINS.

SELECT a.Name, a.class, a.rollNo, b.support, b.grade 
FROM TABLE-A a 
     LEFT JOIN TABLE-B b 
      ON a.RollNo = b.RollNo 
UNION ALL 
SELECT a.Name, a.class, b.rollNo, b.support, b.grade 
FROM TABLE-B b 
     LEFT JOIN TABLE-A a 
      ON a.RollNo = b.RollNo 
WHERE a.RollNo IS NULL 
+0

в этом подходе дубликаты RollNo ...... это нехорошо. –

+1

Вы пытались использовать 'union' вместо' union all'. Я не знаю, поддерживается ли это. –

+0

@PrateekRaj Я оставил там, где по второму запросу. Я обновил запрос, и теперь он должен работать. –

1

Вы можете использовать union из left join и right join (но это not implemented yet in SQLite), поэтому вместо этого right join использование left join с переставленными таблицами:

select * from (
    select a.name, a.class, coalesce(a.rollNo, b.rollNo) as rollNo, b.sport, b.grade 
    from tableA a 
    left join tableB b on a.rollNo = b.rollNo 
    union 
    select a.name, a.class, coalesce(a.rollNo, b.rollNo) as rollNo, b.sport, b.grade 
    from tableB b 
    left join tableA a on b.rollNo = a.rollNo 
) t 
order by rollNo 
Смежные вопросы