2009-11-09 5 views
3

Я задавался вопросом, есть ли способ, чтобы сделать своего рода 12:59 левое внешнее соединение:ONE TO ONE LEFT OUTER JOIN

мне нужно присоединиться, что матчи сказать таблицу А с таблицей B, для каждой записи на таблица A должна искать свою пару на таблице B, но существует только одна запись, соответствующая этому условию, поэтому, когда она находила свою пару на B, она должна остановиться и продолжить следующую строку в таблице A.

Что У меня есть простой ЛЕВЫЙ ВЗГЛЯД.

select * from A LEFT OUTER JOIN B ON A.ID = B.ID ORDER BY (NAME) ASC 

Заранее благодарен!

+1

Является ли это отношением один к одному, определенным в базе данных, или может содержать N записей, связанных с A на основе внешнего ключа? – Josh

+1

Что не так с вашим левым объединением? –

+0

Является ли один к одному определенным отношениям Josh – Sheldon

ответ

3

Синтаксис, который вы представляете в своем вопросе, верен. Нет никакой разницы в запросе о присоединении к взаимно однозначному отношению, чем к одному-ко-многим.

1

SQL не работает таким образом. Во-первых, он не смотрит на вещи по очереди. Во-вторых, что определяет запись, которую вы хотите сопоставить?

Предполагая, что вы на самом деле не волнует, какая строка является selcted, что-то подобное может работать:

SELECT * 
From tableA 
left outer join 
(select b.* from tableb b1 
join (Select min(Id) from tableb group by id) b2 on b1.id - b2.id) b 
on a.id = b.id 

, но это все еще довольно сомнительно, что вы Виль получить записи, которые вы хотите, когда есть несколько записей с id в таблице b.

+0

Привет, HLGEM. Я забыл сказать, что в обоих случаях идентификаторы в состоянии JOIN уникальны. Спасибо – Sheldon

+0

-1 за отсутствующую точку вопроса. Вы слишком усложнили проблему. –