1

カテゴリと位置の 2 つの列があります。

Category     |  Position
-------------|----------
A            |  0
A            |  1
A            |  2
A            |  3
B            |  0
B            |  1
B            |  2
B            |  3

私のクエリでは、 を選択しますwhere category = B, limit 4。カテゴリ B に 3 つのレコードしかない場合、欠落している位置の A レコードが必要です。

これを効率的に行うにはどうすればよいでしょうか。

4

2 に答える 2

1

これを解決する 1 つの方法は、問題を再構築することです。B の特定の位置が欠落している場合は、A レコードを使用します。これは、次の場合にのみ機能します。カテゴリ B に 3 つのレコードしかないというステートメント は、欠落している位置を検出するための単なる方法でした。

次に、A レコードを B レコードに結合し、列で合体を実行するだけです。これは、特定の位置が欠落している場合、A レコードが使用されることを意味します。

SELECT 
    COALESCE(B_Rec.Category, A_Rec.Category) Category,
    COALESCE(B_Rec.Position , A_Rec.Position ) Position 

FROM 
    tabl A_Recs
    LEFT JOIN B_Rec
    ON A_recs.Position = B_recs.Position 
       AND a_Rec.Category = 'A' 
       AND b_Rec.Category = 'B'
于 2012-07-18T15:32:33.967 に答える
-1
select * 
from tbl
order by Category desc
limit 4
于 2012-07-18T12:05:36.737 に答える