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")列值订购。

4

3 回答 3

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

结果:

| 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, min(r.nu) MinNu FROM products p left join p_images r on p.id=r.product group by p.id order by MinNu

按聚合排序:

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

请参阅带有两个查询的演示的SQL Fiddle

结果是:

| 身份证 | 姓名 | 图片 | 闽南语 | ------------------------------ | 25 | 鞋| a1.jpg | 0 | | 26 | 矮人 | r3.jpg | 1 |

于 2013-01-18T10:08:18.397 回答
1

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

SQLFIDDLE 演示

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 fiddle。

SQLFIDDLE 演示

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 |
于 2013-01-18T10:11:06.290 回答
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
于 2013-01-18T10:14:19.180 回答