2017-02-12 3 views
-1

Je dois éliminer les ID en double. J'ai déjà essayé le code ci-dessous, mais quand je l'utilise il ne me semble rien.ID Disticnt lorsque j'utilise rejoindre

Select disticnt i.id,b.barcode,i.code,i.name,i.price 
from inventory i 
join barcodes b on i.id=b.id 

Le problème est que je reçois même ids parce que j'ai des codes à barres bien différentes qui fixs dans un id. Comment puis-je éliminer ids double

Here is an image of my data

+0

Pouvez-vous partager les structures des tableaux, quelques exemples de données et le résultat que vous voulez obtenir? – Mureinik

+0

vous pourriez 'grouper par i.id'? Mais le problème auquel vous serez confronté est - quel est le bon code à barres que vous voulez réellement? – Gravy

+0

lorsque j'essaie cela, j'obtiens cette erreur La colonne 'b.BarCode' n'est pas valide dans la liste de sélection car elle n'est contenue ni dans une fonction d'agrégat ni dans la clause GROUP BY. et la même chose pour le reste de mes colonnes – Dim1

Répondre

0

Le problème est que la table des codes-barres peut avoir plusieurs lignes pour chaque id de la table d'inventaire. Pour obtenir un seul enregistrement de la table d'inventaire, vous devez d'abord déterminer quel code-barres souhaitez-vous récupérer pour chaque ID comportant plusieurs codes-barres. Une façon est d'utiliser group by avec max ou min:

SELECT i.id, 
     MAX(b.barcode) as barcode, 
     i.code, 
     i.name, 
     i.price 
FROM inventory i 
JOIN barcodes b on i.id=b.id 
GROUP BY i.id, i.code, i.name, i.price