0

製品 A と製品 B の両方を含むトランザクション リストから請求書を返す必要があります。

テーブルの例

prod_code | invoice
 apple    |  100
 banana   |  100
 orange   |  100
 apple    |  101
 kiwi     |  101
 grape    |  101
 apple    |  102
 banana   |  102
 grape    |  102

2 つの製品を入力する必要があり、両方の製品の請求書番号をリストする必要があります。リンゴとバナナを入力すると、100 と 102 を返す必要があります リンゴとブドウを入力すると、101 と 102 を返します

それは非常に単純であるように思えますが、私の人生では、これを行う方法を考えることができません。

解決した

わかりました私は自分の質問を解決しました。なぜ以前に考えなかったのかわかりません。思った通り、かなりシンプル。

select invoice from transaction where prod_code="apple" and invoice in (select invoice from transaction where prod_code="banana")
4

1 に答える 1

2
SELECT
  invoice
FROM
  transactions
WHERE
  prod_code IN ('apple', 'banana')
GROUP BY
  invoice
HAVING
  COUNT(DISTINCT prod_code) = 2

ただし、これは高速なクエリではないことに注意してください。この構造では、パフォーマンスを大幅に向上させるのは簡単ではありません。

その性質上、最初のステップは、find all invoices with 'apple' <OR> 'banana'両方を含む請求書をフィルタリングするために、その後でのみ行う必要があります。

代替手段は...

SELECT
  t_apple.invoice
FROM
  transactions     AS t_apple
INNER JOIN
  transactions     AS t_banana
    ON t_apple.invoice = t_banana.invoice
WHERE
      t_apple.prod_code  = 'apple'
  AND t_banana.prod_code = 'banana'

しかし、それをnprod_codes に一般化するのは簡単ではありません。

于 2012-06-22T10:32:14.223 に答える