9
votes

Rejoindre extérieur gauche avec seulement la première rangée

J'ai une requête quelque chose comme xxx

i fonctionne bien pour moi tant que chaque produit a été attribué à une seule catégorie. Mais si un produit est attribué à de nombreuses catégories, il renvoie toutes les combinaisons possibles.

Puis-je seulement sélectionner le premier et si un produit n'a pas de catégorie, le lien doit toujours être renvoyé avec catégorie_id = null < / p>


2 commentaires

le premier , en fonction de quels critères?


Vous pouvez ajouter un min ou max et un groupe par catégorie_id. Si cela ne suffit pas, déplacez les catégories dans une sous-requête.


3 Réponses :


3
votes

Vous pouvez utiliser un groupe par pour y accomplir avec un Fonction globale , probablement min ou max .

Selon la catégorie ID que vous préférez dans votre résultat, vous pouvez sélectionner le minimum. P>

SELECT S.product_id, S.link, MAX(C.id) AS category_id
FROM Products P
INNER JOIN SEO S ON S.product_id = P.id AND P.product_type = 1
LEFT OUTER JOIN Categories C ON c.product_id = P.id
WHERE P.active = 1
GROUP BY S.product_id, S.link


2 commentaires

Cela ne retournerait-il pas plusieurs rangées? La fonction max / min est appliquée sur le jeu de résultats, il ne filtre pas les lignes de la série de résultats ...


@Justinrowe the groupe par vous limite à une ligne par product_id et lien combinaison.



1
votes

Solution alternative à l'aide de sous-requête:

SELECT S.product_id, S.link, 
(
 SELECT C.id FROM Categories C WHERE C.product_id = P.id AND
 ROW_NUMBER() OVER(ORDER BY /* your sort option goes here*/ ) = 1
) AS category_id
FROM Products P
INNER JOIN SEO S ON S.product_id = P.id AND P.product_type = 1
WHERE P.active = 1


0 commentaires

5
votes

Un moyen facile est d'utiliser des applications extérieures, de manière à avoir une jointure corrélée et de faire une première requête. Ainsi, vous êtes capable d'accéder à toutes les colonnes de l'enregistrement de catégorie en question. J'ajoute un nom de catégorie ici comme exemple: xxx


1 commentaires

En utilisant une application extérieure, il est également possible de commander par n'importe quelle colonne de la table de catégorie qui est probablement ce dont il a besoin.