2012-05-22 6 views
-2

Il y a 2 tables SQL:requête SQL pour 2 tables

Table1 
    ID | field1 
    1 | a 
    2 | b 

Table2 
     field1 | field2 
     a  | 111 
     a  | 222 
     b  | 333 
     b  | 444 
     b  | 555 

Je dois obtenir les éléments suivants Table3:

ID | field1 | field2 
1 | a  | 111 
1 | a  | 222 
2 | b  | 333 
2 | b  | 444 
2 | b  | 555 

je me suis lassé d'exécuter cette requête SQL:

SELECT t1.ID, t1.field1, t2.field2 FROM table1 t1, table2 t2 WHERE t1.field1=t2.field1; 

mais par conséquent, j'ai reçu des entrées en double, comme ceci

ID | field1 | field2 
1 | a  | 111 
1 | a  | 111 
2 | a  | 222 
2 | a  | 222 

etc.

Aidez-nous s'il vous plaît.

+0

Quelle base de données et quelle version utilisez-vous? –

+0

SELECT DISTINCT fonctionne correctement comme suggéré ci-dessous. Je ne sais pas pourquoi ces réponses ont été downvoted. On dirait que quelqu'un n'est pas de bonne humeur :) –

+1

Ainsi que GROUP BY: http://sqlfiddle.com/#!2/76afc/3 – ilanco

Répondre

3

(Je suppose que vos données d'échantillon ne soit pas représentatif de votre question, car il en résultera pas de doublons.)

Vous pouvez utiliser le mot-clé DISTINCT pour éliminer les doublons, comme ceci:

select distinct t1.ID, 
    t1.field1, 
    t2.field2 
from table1 t1 
inner join table2 t2 on t1.field1 = t2.field1; 

Exemple SQL Fiddle pour illustrer le problème ici: http://sqlfiddle.com/#!2/ed198/1

solution illustrée ici: http://sqlfiddle.com/#!2/ed198/2

+3

Pourquoi auriez-vous besoin de DISTINCT ici? – zmbq

+0

@zmbq Parce que 'DISTINCT' élimine les doublons, ce qui est le problème de l'OP. – RedFilter

+0

Downvoter, vous voulez expliquer pourquoi? – RedFilter

0

Utilisez GROUP BY pour supprimer les doublons de votre résultat.

SELECT t1.ID, t1.field1, t2.field2 
FROM table1 t1, table2 t2 
WHERE t1.field1=t2.field1 
GROUP BY t1.ID, t1.field1, t2.field2; 
+1

+1: cela fonctionne aussi – RedFilter

+0

Même si nous sommes d'accord sur le fait que l'approche "DISTINCT" est la bonne réponse à cette question (je ne suis pas sûr que ce soit le cas, mais disons que c'est pour l'argument). pour y parvenir au lieu de simplement utiliser DISTINCT n'est pas une bonne approche à mon humble avis.Je n'ai pas critiqué cette réponse, mais il n'y a aucune raison de la remettre en question lorsque de meilleures réponses ont été postées. –

+2

@MarkByers Je ne fonde pas mes votes sur votre opinion, mais plutôt sur la mienne, qui est: c'est une réponse valide et correcte qui a été inutilement rejetée. J'ai voté pour compenser le downvote reçu. – RedFilter

0

essayer d'utiliser DISTINCT pour obtenir vos résultats, aussi je vous conseille en utilisant la syntaxe JOIN pour vos tables et non des virgules entre les noms de table.

SELECT DISTINCT t1.ID, t1.field1, t2.field2 
FROM table1 t1 
INNER JOIN table2 t2 
    ON t1.field1=t2.field1; 
3

Votre approche (bien que votre SQL soit moche et difficile à lire) devrait fonctionner.

voir travailler en ligne: sqlfiddle

Votre problème est qu'il ya des doublons dans l'une de vos tables d'entrée. Essayez SELECT * FROM Table1 ou SELECT * FROM Table2 et vous verrez probablement quelque chose comme ceci:

ID | field1 
1 | a 
2 | b 
1 | a 
2 | b 

Je propose:

  • Suppression des lignes en double de la table.
  • Ajout d'un index unique sur votre champ ID pour empêcher que cela ne se reproduise.
+2

Oui, cela * expliquerait * pourquoi DISTINCT est requis. L'exemple d'OP ne nécessite pas DISTINCT. – zmbq

0

Vous allez devoir lancer un SELECT DISTINCT au début de cette requête. SELECT DISTINCT t1.ID, t1.field1, t2.field2 FROM table1 t1, table2 t2 O t t1.field1 = t2.field1;

+1

Je ne sais pas pourquoi votre réponse est downvoted, mais elle fait le bon travail pour moi. –