在SQL左外连接中,如何只加入第一次出现?

时间:2013-07-30 19:40:39

标签: mysql sql left-join

考虑以下表格:

表A

Category  Misc
--------  ----
a         fsd
a         wer
b         fgg
c         ghj 
c         yui
c         rty

表B (将类别映射到数字)

Category  Num
--------  ---
a         1
b         2
c         3

期望的结果

Category  Num  Misc
--------  ---  ----
a         1    fsd
a              wer
b         2    fgg
c         3    ghj
c              yui
c              rty

一个简单的左外连接将尝试将Num映射到表A中的每个类别,但我只希望Num出现一次。可以这样做吗?

1 个答案:

答案 0 :(得分:3)

我仍然对这个原因感到困惑,但是通过你的修改很容易实现。通过左边连接相同的表来抓取任何(在这种情况下是最低的)Misc列,你可以获得TableA中每个Cateogory中只有一个出现的记录。然后,您只能将TableB连接到那些在该分组子查询中找到记录的行。

select
  a.Category,
  a.Misc,
  b.Num
from
  TableA a
  left join (
    select 
      Category, 
      min(Misc) as MinMisc 
    from 
      TableA
    group by
      Category) c on c.Category = a.Category and c.MinMisc = a.Misc
  left join TableB b on b.Category = a.Category and mc.Category is not null