1

我有两列类别和位置。

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

解决这个问题的一种方法是重新定义问题。如果 B 的给定位置缺失,则使用 A 记录。这仅适用于如果此语句If category B only has 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 回答