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 FiddlewithDemoを参照してください

結果:

| 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フィドルを参照してください

結果は次のとおりです。

| ID | 名前| IMG | MINNU | ------------------------------ | 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られたので、これが本当に必要なものだと思います。今回は、SQLフィドルの@bluefeetのおかげで、正しいテーブルを使用しました。

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 に答える