1

行の値のグループが正確に繰り返される場所を照会しようとしています。このような:

id       part_id    supplier    quantity
 1          1         A            20
 2          1         B            30

 3          2         A            11
 4          2         B            30

 5          3         A            20
 6          3         B            30  

各 part_id には、サプライヤーとして A と B の両方が常に含まれていると想定できます。

私の問題は、A=20 および B=30 の part_id を照会したいということです。

結果は part_id : 1 と 3 になります。

A と B が 2 つの異なる行にある場合、どうすればよいでしょうか? これは可能ですか?

4

1 に答える 1

0

副選択は次のようになります。

SELECT id, part_id, supplier, quantity
FROM yourtable
WHERE part_id IN (
   SELECT DISTINCT part_id
   FROM yourtable
   WHERE ((supplier = 'A') and (quantity = 20)) 
      OR ((supplier = 'B') and (quantity = 30))
)

編集、わかりました。新しい情報が与えられたら、サブセレクトでこれを試してください:

 SELECT part_id
 FROM yourtable
 WHERE ((supplier = 'A') and (quantity = 20)) 
      OR ((supplier = 'B') and (quantity = 30))
 GROUP BY part_id
 HAVING COUNT(part_id) = 2

a/b 要素が一致するすべてのレコードを検索し、part_id でグループ化しますが、両方の a/b 部分が一致する part_id のみを返します。したがって、a=11 の場合は無視されます。これは、その特定のケースではカウントが 1 しかないためです。

于 2013-02-16T05:20:36.553 に答える