Deux tables sont
p>
p>
J'aimerais voir la suite 3 choses p>
ID de chaque client (renommer la colonne CUS_ID),
Nom de chaque client (renommer la colonne CUS_NAME)
ID d'achat de leur dernier achat (renommer la colonne Dernier_purchase_id) P>
Veuillez noter que les identifiants d'achat sont mélangés d'entier et de personnage afin de trouver le dernier identifiant, j'ai besoin de trouver la dernière année.Multiple Achat est possible dans un an p>
mon code: p> sortie d'échantillon p> Je reçoit une sous-requête scalaire reçoit plus que erreur d'une ligne. p> p>
3 Réponses :
Vous pouvez essayer ci-dessous -
select customer.id as cus_id,customer.name as cus_name,purchase.id as
latest_purchase_id
from customer join purchase p1 on customer.id=p1.customer_id
where year =
( select max(year) from purchase p2
where p1.customer_id=p2.customer_id)
Ceci est votre problème:
select c.id as cus_id, c.name as cus_name, p.id as latest_purchase_id
from customer c join
purchase p
on c.id = p.customer_id join
(select p2.customer_id, max(p2.year) as max_year
from purchase p2
group by p2.customer_id
) p2
on p2.customer_id = p.customer_id and
p2.max_year = p.year;
La sous-requête scalaire reçoit plus d'une ligne p>
Cela signifie que le
(sélectionnez ID d'achat p1 ...) code> retourne plus d'une ligne. Et bien ... Vous ne pouvez pas utiliser une plaine égale (= code>) contre plusieurs lignes. P>Vous avez deux options: p>
Vous devez vous assurer qu'il renvoie une seule ligne, peut-être utiliser un
max () code> fonction (ou autre), comme dans: p>XXX PRE> LI> Utilisez un opérateur d'agrégateur (comme
n'importe quel code>). Par exemple: p>XXX PRE> LI> ol> blockQuote>
Fournissez des données d'exemple et de vos résultats sont demandés. L'erreur vous indique le problème, l'une de votre sous-requête retourne plus d'une ligne. Vous pouvez le modifier dans une déclaration dans une déclaration au lieu de = si c'est vos résultats souhaités
Bien sûr, laissez-moi ajouter des données d'exemple