次のデータを含む「製品」というテーブルがあります。
--------------------
| id | tag_name |
--------------------
| 1 | electronics |
| 1 | tv |
| 1 | lcd |
| 2 | tv |
| 2 | lcd |
| 3 | tv |
| 3 | lcd |
--------------------
すべての製品に「電子機器」タグを付けることが義務付けられていますが、そのタグが欠落している製品はほとんどありません。私の質問の上のデータに基づいて、「電子機器」タグがないため、ID 2 と 3 を返すように実行するクエリはどれですか。
頭に浮かぶ2つの解決策は
NOT IN を使用する -
select distinct id from products where id not in (select id from products where tag_name='electronics')
- 数百万行の場合、これは非常に非効率的です2番目の解決策は、すべての個別のIDを選択し、そのIDに「electronics」タグが存在するかどうかをチェックし、存在しない場合は行を挿入するスクリプトを作成することです。
これを処理する別のより効率的な方法はありますか? (JOIN
同じテーブルで を使用している可能性があります)