使用Join获取记录信息而不返回查询中的行

时间:2012-04-12 21:03:13

标签: sql join

我有两张桌子(Apple和Bid)。我想根据给定条件返回A中的所有行,并且我想从表B中获取单个值。如果我展示我正在尝试做的事情,这将有所帮助:

Apple
ID
Name
Type

Bid
bid_id
Type

我想返回来自A的所有记录,其中ID与给定ID匹配,并且我希望将bid_id与从表A中提取的每条记录相关联。

所以,我的查询看起来像这样:

"Select A.ID, A.Name, A.Type, B.bid_id
FROM Apple A
LEFT JOIN Bid B on B.Type = A.Type
Where A.ID = 35";

Apple表中只有一条id为35的记录。但是,由于Bid表中有三个类型与Apple#35类型相匹配,因此有三个记录是被退回。

澄清一下,只应返回一个记录。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

任意选择返回MIN值:

Select A.ID, A.Name, A.Type, MIN(B.bid_id)
    FROM Apple A
        LEFT JOIN Bid B 
            ON B.Type = A.Type
    WHERE A.ID = 35
    GROUP BY A.ID, A.Name, A.Type;

答案 1 :(得分:1)

对于MySQL:

Select A.ID, A.Name, A.Type, B.bid_id
FROM Apple A
LEFT JOIN Bid B
  ON B.Type = A.Type
WHERE A.ID = 35
GROUP BY A.ID

这将返回bid_id之一。如果你有一些关于bid_id选择的规则,你可以使用聚合函数来实现它 - 例如,MIN,MAX,也可以实现更复杂的规则。

答案 2 :(得分:0)

鉴于您要查找最多一个随机出价,最快的选项是limit 1

select  A.ID
,       A.Name
,       A.Type
,       B.bid_id
from    Apple A
left join
        Bid B 
on      B.Type = A.Type
where   A.ID = 35
limit   1