2013-01-18 63 views
1

这里是我的查询:集团通过在命令列

SELECT p.*,r.* 
FROM products p 
left join p_images r 
    on (p.id=r.product) 

结果:

id | name | img | nu 
25 | shoe | a1.jpg | 1 
25 | shoe | a2.jpg | 0 
26 | elbs | r3.jpg | 1 

我想这个结果

shoe a2.jpg 0 
elbs r3.jpg 1 

当我在查询中使用group by p.id,它输出a1.jpg
我想订购min("nu")列值。

+0

你可以添加你的表结构?我认为它是产品(编号,名称),p_images(img,产品),但是从哪里来的? – Ilion

回答

1

尝试:

SELECT * 
FROM products p 
LEFT JOIN p_images r ON (r.product=p.id) 
WHERE r.nu = (SELECT MIN(nu) FROM p_images m WHERE m.product = p.id) 
ORDER BY nu 
+2

您错过了按此查询中min值的顺序。 – Taryn

+0

这就是为什么MIN(女)被添加在子查询 – neeraj

+0

但我喜欢你的方式获取结果的方式 – neeraj

2

您可以使用子查询来获取min(nu)值,然后加入该回你p_image表,确保你返回正确的图像:

select p.id, 
    p.name, 
    i.img, 
    r.minnu 
from products p 
left join 
(
    select min(nu) MinNu, product 
    from p_images 
    group by product 
) r 
    on p.id=r.product 
left join p_images i 
    on r.minnu = i.nu 
    and r.product = i.product 
order by i.nu; 

SQL Fiddle with Demo

结果:

| ID | NAME | IMG | MINNU | 
------------------------------ 
| 25 | shoe | a2.jpg |  0 | 
| 26 | elbs | r3.jpg |  1 | 

您可以只添加一个 ORDER BY该值。由于您使用的是order by子句,因此您可以使用别名,也可以将聚合放入其中。

排序别名:

SELECT p.id, p.name, r.img, 分钟(r.nu)MinNu FROM商品P 左加入p_images上p.idř = r.product 组由p.id 为了通过MinNu

整理汇总:

SELECT p.id, p.name, r.img, 分钟(r.nu)MinNu FROM商品P 左加入p_images R ON p.id = r.product 组由p.id 为了通过分钟(r.nu);

请参阅SQL两者Fiddle with Demo查询

结果是:

| ID | NAME | IMG | MINNU | ------------------------------ | 25 |鞋| a1.jpg | 0 | | 26 | elbs | r3.jpg | 1 |

+0

不是很确定,但是OP的预期结果似乎显示出'25,a2.jpg,0',即使我在之前的查询中错过了这一部分。所以我做了另一个..你认为这是OP的问题的错字:) – bonCodigo

+0

@bonCodigo我其实错过了。我现在更新了我的答案,以返回正确的结果。 – Taryn

+0

谢谢 - 真棒! –

1

这是您需要的吗?这里错了,因为我把你以前的结果作为表格..:)

SQLFIDDLE DEMO

select id, name, img, 
min(nu) 
from t1 
group by id 
; 

所以我还不如给基于这样那么答案:

select x.id, x.name, x.img, min(x.nu) 
from( 
SELECT p.,r. FROM products p 
left join p_images r 
on (p.id=r.product)) x 
group by x.id 
order by x.nu 

| ID | NAME | IMG | MIN(NU) | 
-------------------------------- 
| 26 | elbs | r3.jpg |  1 | 
| 25 | shoe | a1.jpg |  0 | 

嗯,你的预期结果说r2.jpg and 0,所以我觉得这个是什么你真的需要..这一次使用正确的表,感谢@bluefeet他的SQL小提琴。

SQLFIDDLE DEMO

select p.id, p.name, x.img, x.mn 
from products p 
left join (select i.product, i.img, 
      min(i.nu) mn 
      from p_images i 
      group by i.nu, i.product) 
x on p.id = x.product 
group by x.product 
order by x.mn 
; 

| ID | NAME | IMG | MN | 
--------------------------- 
| 25 | shoe | a2.jpg | 0 | 
| 26 | elbs | r3.jpg | 1 | 
+0

@Halis我只是双倍注意到你的预期结果,看起来你需要'a2.jpg 0' ..对于'25',所以请检查出来:) – bonCodigo