2016-06-03 3 views
-1

У меня есть 2 таблицы с соотношением 1: n. Я хочу присоединиться к ним, не повторяя (дублируя) значения из одной таблицы.SQL-соединение двух таблиц без повторяющихся значений

Во-первых, у меня есть таблица с бюджетами:

id name budget 
1 John 1000 
2 Kim 3000 

И второй у меня есть таблица траты:

id amount 
1 112 
1 145 
1 211 

Результат должен выглядеть следующим образом:

id name budget amount 
1 John 1000 112 
1 null null 145 
1 null null 211 
2 Kim 3000 null 

Выход может также быть: (это не важно)

id name budget amount 
1 null null 112 
1 John 1000 145 
1 null null 211 
2 Kim 3000 null 

Возможно ли это с помощью SQL?

Здесь объединение, которое повторяет значение:

create temporary table a (id1 int,name varchar(10),budget int); 
insert into a (id1,name,budget) values(1,'Maier',1000),(2,'Mueller',2000); 
create temporary table if not exists b (id2 int,betrag int); 
insert into b (id2,betrag) values(1,100),(1,133),(1,234); 
select * from a left join b 
on a.id1=b.id2 
; 
+0

Возможно, вам будет легче это сделать в клиенте, а не в SQ L. Где идет выход? – Mike

+0

Возможно? Да. Имеет ли смысл SQL? На самом деле не так, поскольку ваши результаты зависят от порядка, но не имеют неотъемлемого способа упорядочения себя. – RBarryYoung

+0

Вывод является временным для обработки программой. Выполнение этого в клиенте - это намного больше кода. Это не зависит от порядка, потому что мне все равно, что Джон находится в ряду 1,2 или 3. – jms

ответ

1

Ключевое слово DISTINCT используется для устранения повторяющихся строк из результата запроса:

select distinct b.id, b.name, b.budget, s.amount 
from budgets b left join spendings s 
on b.id = s.id; 

Вы также можете использовать Группировку по статье, которая работает аналогично например, Distinct. В этом случае

select b.id, b.name, b.budget, s.amount 
from budgets b left join spendings s 
on b.id = s.id 
group by b.id, b.name, b.budget, s.amount;