2010-09-03 5 views
0

J'ai un problème de joindre deux tables:joindre deux tables MySQL

table1  
id name 
1 aaa 
2 bbb 
3 ccc 

table2  
id table1_id name 
1 1   x1 
2 1   x2 
3 2   s1 

table1 est la table principale, table2 contient des attributs.

Je dois joindre et rechercher les deux tables, mais afficher des résultats distincts de la première table. En utilisant JOIN, j'obtiens plusieurs résultats de table2.

Le scénario est que je dois rechercher la table principale Table1 et tous les attributs et TABLEAU2 retour si trouvé

+0

"et retour si trouvé", que voulez-vous dire? De quoi avez-vous besoin retourné? –

Répondre

1
select distinct(name) from table1 inner join table2 on table1.id = table2.table1_id where table2.name = x2; 

devrait faire l'affaire.

1

Si vous avez besoin d'entrées qui dans les deux tables:

SELECT * from Table1 t1 
WHERE YourConditionsHere 
AND EXISTS (SELECT 1 from Table2 t2 
      WHERE t1.Id = t2.Table1_id 
       AND YourConditionsHere) 

si vous avez besoin des entrées de tableau 1 pour ce qui n'existe pas enteries dans Tableau2

SELECT * from Table1 t1 
LEFT JOIN 
(SELECT * from Table2 
    WHERE YourConditionsHere 
) t2 
ON (t1.Id = t2.Table1_id) 
WHERE YourConditionsHereForTable1 
+0

cela n'affiche que les correspondances mais j'ai quelques lignes dans la table1 où il n'y a pas d'attributs dans la table2 – miojamo

+0

@ user438755, j'ai étendu ma réponse. –

0

une autre option

select * from table1 t1 where t1.id in (select table1_id from table2 t2 where t2.name = "x1"); 

il est probablement préférable de vérifier les plaines de requête (ie EXPLAIN) pour toutes les requêtes suggérées et vérifiez celui qui fonctionne le mieux pour votre scénario exact.