1

2つのテーブルがordersありordered_productsます。

ORDERS
|ORDERS_ID|CUSTOMER NAME|...
|1        |PIPPO        |...
|2        |PLUTO        |...

ORDERED PRODUCTS
|ORDERED_ID|ORDERS_ID|PRODUCT  |PRODUCT_TYPE|...
|1         |1        |ProdottoA| 1          |...
|2         |1        |ProdottoB| 2          |...
|3         |1        |ProdottoC| 1          |...
|4         |2        |ProdottoD| 2          |...

2つのクエリが必要です。1つ目はタイプ1の製品が少なくとも1つあるすべての注文を選択し、2つ目はタイプ1のすべての製品があるすべての注文を選択します。

最初のものについては、次のクエリで解決しました。

select distinct orders_id from ORDERS o left join ORDERED_PRODUCTS op on (o.orders_id=op.orders_id) where op.product_type = '1'

しかし、2番目のクエリの解決策が見つかりません。


解決策が見つかりました!私が使用した:

select distinct orders_id from ORDERS o left join ORDERED_PRODUCTS op on (o.orders_id=op.orders_id) 
where
(select count(ordered_id) from ordered_products op where op.orders_id = o.orders_id)
=
(select count(ordered_id) from ordered_products op where op.orders_id = o.orders_id and op.orders_products_categorizzazione='1')

お手伝いありがとう

4

2 に答える 2

0

テストされていませんが、これは機能するはずです:

select orders_id
from orders
where 
  ( 
  select count(distinct product)
    from ordered_products
    where ordered_products.orders_id = orders.orders_id
    and ordered_products.product_type = 1
  )
  =
  (
  select count(distinct product)
    from ordered_products
    where ordered_products.product_type = 1
  );

それが何をするか:

  • 現在の順序でタイプ1のすべての個別の製品をカウントします
  • すべての注文内でタイプ1のすべての個別の製品をカウントします
  • 結果を比較する

最適化にはほど遠いため、おそらくより良い方法がありますが、それは機能し、簡単に理解できます。

PS:データベース構造を選択できる場合は、製品自体に別のテーブルを用意することにします。UML仕様に適合し、冗長性が低く、インデックス作成が優れています。

于 2012-11-13T10:48:41.813 に答える
0

最初のクエリ:

SELECT *
FROM Orders
WHERE Exists (select null
              from ordered_products
              where
                orders.orders_id = ordered_products.orders_id
                and product_type=1)

そして2番目のもの:

SELECT *
FROM Orders
WHERE
  Orders_id in (select orders_id
                from ordered_products
                where ordered_products.orders_id = orders.orders_id
                group by orders_id
                having sum(if(product_type=1,1,0))=count(*))
于 2012-11-13T10:49:55.273 に答える