2013-09-05 2 views
2

J'ai trois tables, Fournisseurs, Produits et Livraisons. Je voudrais montrer les noms des fournisseurs et la quantité de la table de livraison. Il y a 5 fournisseurs différents et il y a 12 livraisons. Je m'attends à ce que la table jointe contienne 12 lignes avec des noms et des livraisons.La jointure interne SQL crée des doublons

Ceci est mon code.

SELECT Suppliers.SNAME, Deliveries.QTY 
FROM Suppliers, Deliveries 
INNER JOIN Products 
ON Deliveries.P=Products.Penter (typo, should be Products.P) 

La sortie est 60 lignes avec beaucoup de doublons et quelques correspondances incorrectes.

Tables: Suppliers Products Deliveries

+2

5x12 = 60, il semble que votre 'JOIN 'pourrait utiliser des critères supplémentaires. Post structure de la table/données de l'échantillon et nous pouvons le clouer. –

+1

Vous devez spécifier la condition 'JOIN' entre les fournisseurs et les deux autres tables. –

+1

Je pense que vous devez définir une jointure entre les fournisseurs et les livraisons aussi. Puisque vous les avez joints dans votre exemple – Wietze314

Répondre

5

Tuer des jointures dépréciée implicite, et préciser JOIN critères, pas sûr de vos structures de table, quelque chose comme:

SELECT s.SNAME, d.QTY 
FROM Deliveries d 
INNER JOIN Suppliers s 
ON d.s = s.s 
INNER JOIN Products p 
ON d.p = p.p 

Une JOIN non spécifiée implicite à savoir:

SELECT Suppliers.SNAME, Deliveries.QTY 
FROM Suppliers, Deliveries 

Amènerons dans tous les records de chaque table jointe à chaque enregistrement de l'autre, dans votre cas, 5 enregistrements et 12 enregistrements = 60 combinaisons.

+0

'L'alias du fournisseur' p' devrait être 's'. Je réparerais moi-même, mais il y a un minimum de 6 modifications de caractères. – markdsievers

+0

@markdsievers merci! –

1

Utilisez une bonne syntaxe de jointure cohérente. Vous mélangez des jointures de style ancien (, avec condition dans la clause where) avec la syntaxe ANSI join appropriée.

Vous voulez dire quelque chose comme ceci:

SELECT s.SNAME, d.QTY 
FROM Suppliers s join 
    Deliveries d 
    d.SupplierId = s.SupplierId join 
    Products p 
    ON d.P = Products.Penter; 

Je fais le champ de jonction entre Suppliers et Deliveries. Et, je devine seulement que ce sont les tables qui doivent être connectées (peut-être Suppiers et Products).