Je fais une requête pour retourner tous les paniers d'utilisateurs, stockés dans la table sb_carts. Les informations sur le produit stockées dans sb_carts sont référencées sur deux clés product_sku et school_id. Il doit faire référence à la fois pour retourner un produit unique avec des niveaux de stocks uniques, etc.MYSQL Inner Joindre deux tables sur deux clés
Lorsque j'exécute la requête suivante retourne une ligne, j'attends 3 lignes. J'ai essayé de rompre la jointure interne en deux jointures séparées, mais cela ne retourne qu'un résultat. joindre seulement sur une clé a le résultat désiré, mais peut être renvoyer le mauvais produit. A gauche JOIN renvoie 3 lignes, mais certaines données manquent produit spécifique
Voici un exemple simplifié de ce que je fais
SELECT sb_carts.product_sku FROM sb_carts INNER JOIN sb_products ON sb_products.sku = sb_carts.product_sku AND sb_products.school_id = sb_carts.school_id WHERE sb_carts.order_id = 0 AND sb_carts.user_id = 2 GROUP BY sb_carts.cart_id
La question complète ressemble
SELECT COUNT(DISTINCT sb_carts.cart_id) as quantity, sb_carts.* FROM sb_carts INNER JOIN sb_children ON sb_children.child_id = sb_carts.child_id INNER JOIN sb_school_entities ON sb_school_entities.school_id = sb_children.school_id INNER JOIN sb_products ON sb_products.sku = sb_carts.product_sku AND sb_products.school_id = sb_carts.school_id LEFT JOIN sb_houses ON sb_children.house_id = sb_houses.id LEFT JOIN sb_refund_cart ON sb_carts.cart_id = sb_refund_cart.cart_id WHERE sb_carts.order_id = 0 AND sb_carts.user_id = 2 GROUP BY sb_carts.child_id, sb_carts.product_sku, sb_carts.school_id ORDER BY sb_children.dob_year, sb_children.dob_month, sb_children.dob_day ASC
Oui, c'est exactement le cas. MySQL ne vous force pas à utiliser des fonctions d'agrégat si vous utilisez GROUP BY (contrairement à MS-SQL par exemple, où cette requête ne serait pas valide) –