Я хочу использовать полное внешнее соединение для объединения двух таблиц с записями (id, value). Обе таблицы не имеют пересечений в поле id, но я хочу присоединиться к ним по полю id. Я пытаюсь использовать полное внешнее соединение для выполнения этого соединения, но я не понимаю, как это сделать.Нужна помощь в понимании полного внешнего соединения
Я использую DB2.
До сих пор у меня есть (каждый оператор выполняется вручную по отдельности):
create table S1 (
id integer primary key not null,
value integer not null)
create table S2 (
id integer primary key not null,
value integer not null)
insert into S1 values (0, 50)
insert into S1 values (1, 20)
insert into S2 values (2, 40)
insert into S2 values (3, 90)
select * from S1 full outer join S2
Я получаю сообщение об ошибке на полное внешнее соединение попытка:
SQL0104N An unexpected token "join S2" was found following "* from S1 full
outer". Expected tokens may include: "<space>". SQLSTATE=42601
EDIT: Спасибо! У меня это работает, но я этого не ожидал.
select * from S1 full outer join S2 on S1.id = S2.id
вопрос в том, что теперь он показывает (: означает пространство)
+--+-----+--+-----+
|ID|VALUE|ID|VALUE|
+--+-----+--+-----+
|-:|-::::|3:|90:::|
+--+-----+--+-----+
|-:|-::::|2:|40:::|
+--+-----+--+-----+
|1:|20:::|-:|-::::|
+--+-----+--+-----+
|0:|50:::|-:|-::::|
+--+-----+--+-----+
Я не хотел дубликата поля. Есть ли способ сделать таблицу объединенной в a:
+--+-----+
|ID|VALUE|
+--+-----+
стол?
Я попытался с помощью
select id from s1
full outer join s2 on s1.id = s2.id
и, разумеется, я получаю
SQL0203N A reference to column "ID" is ambiguous. SQLSTATE=42702
РЕШИТЬ!
select coalesce(s1.id, s2.id) as id, \
coalesce (s1.value, s2.value) as value \
from s1 full outer join s2 on s1.id = s2.id and s1.value = s2.value
group by id asc
и другое решение от D Stanley (mofidied)
SELECT Id, Value \
FROM S1 \
UNION ALL \
SELECT Id, Value \
FROM S2 \
ORDER BY ID ASC
Спасибо!
Вам все еще нужно сказать, что вы присоединяетесь на. Например. 'ON s1.id = s2.id'. Это только перекрестное соединение, которое не требует включения. – GarethD
еще нужно предложение on ... добавление «on 1 = 1» в конец вашего запроса функционально создает кросс-соединение для этого – Twelfth
Спасибо! Это работает, хотя теперь у меня проблема форматирования ... Любая помощь приветствуется! – Dmitry