1

DB に製品と注文の 2 つのテーブルがあります。注文できる商品は 1 種類のみです。

基本的な考え方は次のとおりです。

ここに画像の説明を入力

私がやろうとしているのは、copmany_id を指定すると、注文が 10 未満 (0 を含む) のすべての製品 (その会社から) を返すクエリです。

私のクエリは次のようになります。

SELECT p.*
FROM   product p,
       order o
WHERE  p.company_id =?
       AND o.product_id = p.id
GROUP  BY p.id
HAVING Count(o.id) < 10
ORDER  BY p.id DESC

このクエリは、注文数が 0 未満の商品に対しては正常に機能しますが、注文数が 0 の商品は返されません。それらも返却するにはどうすればよいですか?

4

2 に答える 2

1

INNER JOININGこれは、少なくとも 1 つの注文がある製品のみが返されることを意味します。LEFT OUTER JOIN注文テーブルが必要になります。

SELECT p.*
FROM   product p
       LEFT OUTER JOIN order o
                    ON o.product_id = p.id
WHERE  p.company_id = ?
GROUP  BY p.id
HAVING Count(o.id) < 10
ORDER  BY p.id DESC  

JOIN左外部結合は、操作の右側に一致するレコードがあるかどうかに関係なく、操作の左側のすべてのレコードを少なくとも 1 回返しJOINます。

于 2012-08-20T08:53:05.540 に答える
1

左外部結合を試す

SELECT p.*
FROM   product p
       LEFT OUTER JOIN order o
                    ON o.product_id = p.id
WHERE  p.company_id =?
GROUP  BY p.id
HAVING Count(o.id) < 10
ORDER  BY p.id DESC

左外部結合については、この例を参照してください

于 2012-08-20T08:53:10.717 に答える