Как написать запрос, чтобы получить только первую подходящую строку при объединении двух таблиц? - PullRequest
1 голос
/ 20 ноября 2010

Предположим, у меня есть следующие таблицы:

Таблица 1:

AId
AMoniker

Таблица 2:

BId
BMoniker

Table1-> Table2 - это отношение один ко многим

Мне нужна временная таблица из этих двух таблиц, в которой, если у определенного Amoniker есть несколько BMonikers, тогда в таблицу должна входить только первая.

Например, если таблицы имеют следующие данные:

Table1:

1 ABCD
2 DEFG
3 QWER

Таблица 2:

1 QZ
1 XC
1 CV
2 DE
2 OP
3 QW

запрос должен возвращать следующее:

ABCD QZ
DEFG DE
QWER QW

Мой запрос для получения всех строк:

select b.BMoniker, a.AMoniker
into #moniker_map
from Table1 a inner join Table2 b
on a.Aid=b.Bid

Как я могу изменить это, чтобы получить только 1-ую строку изTable2 для каждого идентификатора.

Я пробовал следующий запрос:

select b.BMoniker, a.AMoniker
from Table1 a inner join Table2 b
on a.Aid=b.Bid
and b.BMoniker in 
(
    select top 1 BMoniker
    from Table2
    where Bid=cb.Bid
    ORDER BY BMoniker
)

Но я получаю следующую ошибку: Неверный синтаксис рядом с ключевым словом "top" Код ошибки Sybase = 156, SQLState = "ZZZZZ"

Ответы [ 2 ]

2 голосов
/ 20 ноября 2010

Выбирает строку с минимальным значением из таблицы 2 (синтаксис PostgreSQL):

SELECT a.AMoniker, MIN(b.BMoniker) FROM Table1 a, Table2 b
WHERE a.Aid = b.Bid GROUP BY 1;
0 голосов
/ 20 ноября 2010

Возможно, это опечатка, но похоже, что ваш подзапрос ссылается на псевдоним таблицы cb, который не определен.Можете ли вы попробовать это:

select b.BMoniker, a.AMoniker
from Table1 a inner join Table2 b
on a.Aid=b.Bid
and b.BMoniker in 
(
    select top 1 BMoniker
    from Table2 c
    where c.Bid=a.Bid
    ORDER BY BMoniker
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...