-1
votes

Je reçois "Scalar SubQuery contient plus d'une ligne" pour la requête suivante, j'ai écrit.Can quelqu'un s'il vous plaît corriger-moi?

Deux tables sont

  1. client (ID, nom, pays)

    table client

    1. achat (ID, client_id, année)

      table d'achat

      J'aimerais voir la suite 3 choses

      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)

      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

      mon code: xxx

      sortie d'échantillon xxx

      Je reçoit une sous-requête scalaire reçoit plus que erreur d'une ligne.


2 commentaires

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


3 Réponses :


0
votes

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)


0 commentaires

1
votes

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;


0 commentaires

0
votes

La sous-requête scalaire reçoit plus d'une ligne

Cela signifie que le (sélectionnez ID d'achat p1 ...) retourne plus d'une ligne. Et bien ... Vous ne pouvez pas utiliser une plaine égale ( = ) contre plusieurs lignes.

Vous avez deux options:

  1. Vous devez vous assurer qu'il renvoie une seule ligne, peut-être utiliser un max () fonction (ou autre), comme dans: XXX

  2. Utilisez un opérateur d'agrégateur (comme n'importe quel ). Par exemple: XXX


0 commentaires