0
votes

Comment écrire une requête SQL sans doublons

Comment écrire une requête SQL sans doublons correctement?

Il y a deux tables. Tableau 1 Clients et Tableau 2 Commandes P>

 CUSTOMERS (ID, FIRSTNAME, LASTNAME, ADDRESS); 
 ORDERS (ID, PRODUCT_NAME, PRODUCT_PRICE, DATE_ORDER, ID_CUSTOMER, AMOUNT); 

SELECT DISTINCT CUSTOMERS.ID, ORDERS.PRODUCT_NAME 
FROM CUSTOMERS 
INNER JOIN ORDERS 
ON CUSTOMERS.ID = ORDERS.ID_CUSTOMERS
WHERE PRODUCT_NAME = ‘Apple MacBook Air 13’; 


0 commentaires

4 Réponses :


0
votes

Savez-vous pourquoi la duplication, non? C'est parce que chaque client que vous pourriez avoir 1 ou plusieurs clients.

Donc, si vous souhaitez continuer à filtrer par le produit et supprimez les duplicats, vous pouvez utiliser la clause distincte dans ce cas et à l'instruction SELECT, des champs de référence de la sélection de la table des clients. Si vous avez des champs de la table des clients_orders étant référencés sur le choix, il est en double.


0 commentaires

3
votes

Vous pouvez imaginer distinct comme une forme d'un filtre de sortie qui est appliqué lorsque la requête elle-même est terminée. La jointure est utilisée pour construire l'entrée à la requête. Les réponses si courtes sont les suivantes: Oui, vous pouvez le faire.


0 commentaires

1
votes

Dans cette requête:

SELECT DISTINCT o.ID_CUSTOMERS, o.PRODUCT_NAME 
FROM ORDERS o
WHERE o.PRODUCT_NAME = 'Apple MacBook Air 13'; 


0 commentaires

0
votes

distinct code> est destiné à éliminer les doublons. Ceci est parfois utile. Mais c'est aussi souvent un indicateur pour une requête mal écrite, car: Pourquoi y a-t-il des lignes en double dans le résultat en premier lieu?

sur votre requête: pourquoi vous rejoignez la table des clients? Cela ne fournit rien de ce que nous ne recevons pas de la table des commandes déjà. Votre requête peut être raccourcie: p> xxx pré>

ou, comme il s'agit d'un seul produit de toute façon: p> xxx pré>

Nous utilisons Distinct CODE> ici, car un client peut commander un produit plusieurs fois et apparaîtra donc dans les résultats à plusieurs reprises, n'avons-nous pas utilisé distinct code>. Cependant, nous lisons toutes les lignes «Apple MacBook Air 13», seulement pour enlever certains ou même beaucoup d'entre eux à la fin. P>

Nous pouvons écrire la requête différemment pour éviter cela. Nous commençons avec la table des clients et montrons ces identifiants / lignes où nous trouvons au moins une commande sur 'Apple MacBook Air 13'. P>

SELECT id
FROM customers c
WHERE EXISTS
(
  SELECT *
  FROM orders o
  WHERE o.id_customers = c.id
  AND o.product_name = 'Apple MacBook Air 13'
);


0 commentaires