ОДИН ИЗ ОДНОГО ЛЕВОГО НАРУЖНОГО РЕЙТИНГА - PullRequest
3 голосов
/ 09 ноября 2009

Мне было интересно, есть ли способ сделать своего рода внешнее соединение слева направо:

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

То, что у меня есть, это простое левое соединение.

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

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 09 ноября 2009

Синтаксис, который вы указали в своем вопросе, верен. В запросе на объединение отношений «один к одному» нет никакой разницы, чем в отношении «один ко многим».

1 голос
/ 09 ноября 2009

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

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

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

Но все же довольно сомнительно, что вы получите нужные записи, когда в таблице b есть несколько записей с идентификатором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...