次の表があります(簡略化され、不要な列が削除されました):
パッケージトランザクション
| memberID | subscriptionType |
| ==========|===================|
| 12345 | 101 |
| 12345 | 203 |
| 12346 | 101 |
| 12347 | 101 |
| 12348 | 101 |
| 12348 | 203 |
| 12349 | 203 |
| 12345 | 205 |
= 101を持たない すべてのレコードを照会したいのですが、同じレコードに対して= 101のレコードが存在するレコードのみを照会します。subscriptionType
subscriptionType
memberID
したがって、私は使用します:
SELECT memberID, subscriptionType
FROM packageTransactions
WHERE memberID IN
( SELECT memberID
FROM packageTransactions
WHERE subscriptionType = '101'
)
AND subscriptionType <> '101'
;
これにより、探している結果セットが得られます。
| memberID | subscriptionType |
| ==========|===================|
| 12345 | 203 |
| 12348 | 203 |
| 12345 | 205 |
ただし、数千レコード (私の場合は +30k) のテーブルでこのクエリを使用すると、結果を返すのに数分かかります。
だから、データをクエリするための「より良い」 /より効率的な方法があるのだろうか?