sql >> データベース >  >> RDS >> Mysql

SQL-最も類似した製品の選択

    これを試してください

    SELECT 
      a_product_id, 
      COALESCE( b_product_id, 'no_matchs_found' ) AS closest_product_match
    FROM (
      SELECT 
        *,  
        @row_num := IF(@prev_value=A_product_id,@row_num+1,1) AS row_num,
        @prev_value := a_product_id
      FROM 
        (SELECT @prev_value := 0) r
        JOIN (
            SELECT 
             a.product_id as a_product_id,
             b.product_id as b_product_id,
             count( distinct b.Attributes ),
             count( distinct b2.Attributes ) as total_products
            FROM
              products a
              LEFT JOIN products b ON ( a.Attributes = b.Attributes AND a.product_id <> b.product_id )
              LEFT JOIN products b2 ON ( b2.product_id = b.product_id )
           /*WHERE */
             /*  a.product_id = 3 */
            GROUP BY
             a.product_id,
             b.product_id
            ORDER BY 
              1, 3 desc, 4
      ) t
    ) t2 
    WHERE 
      row_num = 1
    

    上記のquery closest matchesを取得します すべての商品について、product_idを含めることができます 最も内側のクエリで、特定のproduct_idの結果を取得します 、LEFT JOINを使用しました そのため、product 一致するものがなく、表示されます

    SQLFIDDLE

    これがお役に立てば幸いです



    1. 適切なツールにより、チューニングが迅速に機能します

    2. INSERTステートメントを使用してMySQLWorkbenchでデータベースをエクスポートする

    3. データベースバックアップ-MariaDBMariabackupとPerconaXtrabackupの比較

    4. MySQL +サブストリングを実行する方法は? +交換しますか?