Объединение 2-х таблиц

Amarok

Новичок
Объединение 2-х таблиц

Возможно все просто, но как-то не выходит каменный цветок..
Есть две таблицы:
table1: id, field_1
table2: id, field_2

Поле id - общее.

Данные в таблицах могут выглядеть например так:
table1:
1 10
3 15
4 29

table2:
1 14
2 10
4 13

Нужно построить запрос который выдавал бы следующее:
id, null, field2 - если запись есть только во второй таблице
id, field1, field2 - запись в обоих таблицах
id, field1, null - запись только в первой таблице

т.е. при таких данных запрос выдаст:
1 10 14
2 null 10
3 15 null
4 29 13
_____________
Заранее спасибо.
 

Amarok

Новичок
Какой именно?
Если использовать left, то если нет записи в первой таблице, то не попадает и запись из второй. C rigth наоборот. Или я ошибаюсь?
 

alpine

Новичок
Amarok
Можно поинтересоваться какую практическую задачу ты решаешь?

-~{}~ 11.01.06 18:37:

Попробуй что-то типа этого:
[sql]
( SELECT id, t1.field_1, t2.field_2 FROM `table1` AS t1 LEFT JOIN table2 AS t2 USING ( id ) ) UNION DISTINCT ( SELECT id, t1.field_1, t2.field_2 FROM table1 AS t1 RIGHT JOIN `table2` AS t2 USING ( id ) ) ORDER BY id
[/sql]
 

Amarok

Новичок
Спасибо. Это работает. Возможен ли другой вариант - без UNION? Просто таблицы совсем не маленькие..
Еще нашел такую штуку как FULL OUTER JOIN, вероятно она бы подошла, но это к сожалению это -
1.10.5. То, что надо сделать когда-нибудь
Можно поинтересоваться какую практическую задачу ты решаешь?
Первая таблица - таблица остатков на начало месяца
Вторая таблица - таблица движения по товару (приход расход)
нужно получить остатки на определенную дату.
Т.е. первая таблица нужна чтобы быстрее считалось как-бы все...
 

Amarok

Новичок
Через две временные таблицы и шесть запросов.
Это конечно вариант, но как-то чрезмерно извратно это... В моем варианте таблицы большие и думаю он будет тормозить изрядно... Воспользуюсь лучше первым. Спасибо за помощь.
 

chira

Новичок
немного преобразованный вариант с UNION
Код:
(SELECT id, t1.field_1, t2.field_2
FROM `table1` AS t1
LEFT JOIN table2 AS t2
USING ( id )
)UNION ALL (
SELECT t2.id, NULL, t2.field_2
FROM table2 AS t2
LEFT JOIN `table1` AS t1
USING ( id )
WHERE t1.id IS NULL
)
ORDER BY id
 
Сверху