2010-11-19 72 views
1

考慮我有以下表:如何編寫一個查詢以在連接兩個表時僅獲得第一個匹配的行?

表1:

AId 
AMoniker 

表2:

BId 
BMoniker 

Table1->表2是一對多的關係

我想要一個如果某個特定的Amoniker具有多個BMonikers,那麼只有第一個應該出現在這個表中。

例如,如果表具有以下數據:

表1:

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 

我怎麼能修改此從表2只得到第1行每個ID。

我嘗試以下查詢:

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 
) 

,但我得到以下錯誤:附近關鍵字 '頂' Sybase錯誤代碼= 156 有語法錯誤,SQLSTATE = 「ZZZZZ」

+1

你必須定義「第一」行。哪一個?什麼順序? – Stu 2010-11-19 22:40:33

回答

0

也許這是一個錯字,但它看起來像你的子查詢引用了一個未定義的表別名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 
) 
2

選擇具有最小值行從表2(PostgreSQL的語法):

SELECT a.AMoniker, MIN(b.BMoniker) FROM Table1 a, Table2 b 
WHERE a.Aid = b.Bid GROUP BY 1; 
相關問題