1

product、category、product_to_categoryの3つのテーブルがあります。製品には、主キーproduct_id、category category_id、およびproduct_to_categoryp2c_idがあります。Product_to_ categoryは、それぞれのIDを使用して、製品を多対多の関係にあるカテゴリにリンクします。

基本的に、カテゴリテーブルに存在しないカテゴリからすべての製品を選択するクエリを作成します。これは、製品が別のデータベースから移行されているためです。

私はこのようなものを持っていましたが、少し迷いました。

SELECT * 
FROM product AS p 
LEFT JOIN product_to_category AS p2c ON p.product_id = p2c.product_id 
LEFT JOIN category AS c ON c.category_id 

基本的にそれは私が得た限りです。product_to_categorycategory_idがcategoryテーブルにないproduct_to_categoryテーブルにcategoryテーブルを結合する必要があります。私は完全に間違った道を進んでいるかもしれませんが、行き詰まっています!前もって感謝します。

4

4 に答える 4

1

存在しないカテゴリーの商品をお探しの場合は、ぜひお勧めします

Select p.*,p2c.category_id
  from product p
  join product_to_category p2c
    on p.product_id=p2c.product_id
  left outer join category c
    on p2c.category_id=c.category_id
where c.category_id is null
于 2012-08-20T15:10:04.553 に答える
1
   SELECT p.*
     FROM product AS p
LEFT JOIN product_to_category AS p2c ON p.product_id = p2c.product_id
    WHERE NOT EXISTS (
          SELECT 1
            FROM category c
           WHERE c.category_id = p2c.category_id
    )
于 2012-08-20T15:10:20.360 に答える
1

前提:製品は、存在するカテゴリ、存在しないカテゴリ、またはカテゴリがまったくないカテゴリの一部である可能性があります。カテゴリにまったく属していない商品をリクエストしていないため、商品からprocduct_to_categoryへの最初のLEFTJOINはINNERJOINである必要があります。

警告:私はmysqlに錆びているので、SQLSERVER構文を使用しています。mysqlにON句があるかどうか、またはJOINにwhere句を使用するかどうかを忘れています。ON句がサポートされていない場合は、WHERE句に変更してください。

2つの一般的なアプローチがあります:OUTERJOINまたはNOTIN句(またはNOT EXISTS句、多くの場合、パフォーマンス的にNOT IN句と同じように動作します)。

  1. アウタージョイン

    p。*、p2c.category_idを選択します

    製品pから

    内部結合product_to_categoryp2cON(p.product_id = p2c.product_id)

    LEFTJOINカテゴリcONp2c.category_id = c.category_id

    ここでc.category_idはNULLです

nullのテストでは、一致しないレコードが見つかります。

  1. NOTIN句

    SELECT p。*、p2c.category_id

    製品pから

    内部結合product_to_categoryp2cON(p.product_id = p2c.product_id)

    WHERE p2c.category_id NOT IN(SELECT c.category_id FROM category c)

于 2012-08-20T15:36:01.407 に答える
0
SELECT * 
FROM product AS p 
JOIN product_to_category AS p2c ON p.product_id = p2c.product_id  
JOIN category AS c ON c.category_id != as.category.

これを試して?

于 2012-08-20T15:09:34.977 に答える