LEFT JOIN SQL但不同

时间:2016-10-29 13:08:38

标签: sql

我有两张桌子,

A.Table Sales

Code | qty_sales Values
A    | 10
B    | 20

B中。表大师

Code | Style
A    | AA10
A    | AA12 
B    | BB10

我希望得到这样的结果:

Code | Style | qty
A    |  A10  | 10
B    |  BB10 | 20

我只想获得代码A

的2种风格之一

3 个答案:

答案 0 :(得分:0)

不同的数据库有不同的方法,但这里有一个:

select s.code, c.style, s.qty_sales
from sales s join
     (select m.code, max(m.style) as style
      from master m
      group by m.code
     ) c
     on s.code = c.code;

这是ANSI标准代码。它不选择任意风格;它选择最大值(按字母顺序)。

不需要LEFT JOIN,因为代码在两个表中匹配。

答案 1 :(得分:0)

没有子查询:

select m.code, min(m.style) as style, min(s.qty_sales) as qty_sales
from master m join sales s on s.code=m.code
group by m.code

答案 2 :(得分:0)

补充 Gordon Linoff

的最后答案

我只是改变了#34; m.style"到" c.style"。

select s.code, c.style , s.qty_sales
from sales s join
 (select m.code, max(m.style) as style
  from master m
  group by m.code
 ) c
 on s.code = c.code;

我同意你需要一个"规则"只获得一个主表的寄存器。 我上面的例子是Gordon Linoff使用MAX命令。