0

私は2つのテーブル(AppleとBid)を持っています。与えられた条件に基づいてAからすべての行を返したいのですが、テーブルBから単一の値を取得したいのです。私がやろうとしていることを示すと役に立ちます。

Apple
ID
Name
Type

Bid
bid_id
Type

IDが特定のIDと一致するAからすべてのレコードを返し、テーブルAから取得した各レコードに関連付けられたbid_idを取得したいと思います。

したがって、私のクエリは次のようになります。

"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のレコードが1つだけあります。ただし、テーブルにBidはApple#35のタイプとタイプが一致するテーブルが3つあるため、3つのレコードが返されます。

明確にするために、1つのレコードのみが返される必要があります。

何か案は?

4

3 に答える 3

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;
于 2012-04-12T21:06:05.487 に答える
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など、より複雑なルールも実装できます。

于 2012-04-12T21:06:10.043 に答える
0

最大1つのランダムな入札を探しているとすると、最速のオプションは次のようになります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
于 2012-04-12T21:10:06.537 に答える