0

製品、カテゴリ、およびカテゴリ内の製品のテーブルを使用したかなり標準的なセットアップですが、製品のいくつかの上位カテゴリを取得するためのより良い/より効果的な方法があるかどうか疑問に思っていました (それらを個別に戻したくありません)内部結合は実行できません)。

私が現在持っているSQLは次のとおりです。

 SELECT p.*,
  (SELECT TOP 1 category_name FROM categories c INNER JOIN products_and_categories pc ON pc.category_id = c.category_id WHERE p.product_id = pc.product_id AND category_parent = 100 ORDER BY sort) AS cat_1,
  (SELECT TOP 1 category_name FROM categories c INNER JOIN products_and_categories pc ON pc.category_id = c.category_id WHERE p.product_id = pc.product_id AND category_parent = 200 ORDER BY sort) AS cat_2,
  (SELECT TOP 1 category_name FROM categories c INNER JOIN products_and_categories pc ON pc.category_id = c.category_id WHERE p.product_id = pc.product_id AND category_parent = 500 ORDER BY sort) AS cat_3,
  (SELECT TOP 1 category_name FROM (SELECT TOP 2 c.* FROM categories c INNER JOIN products_and_categories pc ON pc.category_id = c.category_id WHERE p.product_id = pc.product_id AND category_parent = 500  ORDER BY sort) c1 ORDER BY sort DESC) AS cat_4,
  (SELECT TOP 1 category_name FROM categories c INNER JOIN products_and_categories pc ON pc.category_id = c.category_id WHERE p.product_id = pc.product_id AND category_parent = 50 ORDER BY sort) AS cat_5,
  (SELECT TOP 1 category_name FROM (SELECT TOP 2 c.* FROM categories c INNER JOIN products_and_categories pc ON pc.category_id = c.category_id WHERE p.product_id = pc.product_id AND category_parent = 50  ORDER BY sort) c1 ORDER BY sort DESC) AS cat_6
FROM products AS p

いくつかのコラムでこの方法で十分満足していますが、他に方法がないか疑問に思っていましたか? PIVOTテーブルまたは私が考えていなかった何かに参加するか、この方法でそれを受け入れる必要があるかのいずれかです。

他にもいくつかの制限があります (重要な場合とそうでない場合があります)。

  • 一部のサブクエリは結果を返さない場合があります
  • 上位 2 つのカテゴリが必要な行の一部 (上記のコードでわかるように)
4

1 に答える 1