2009-01-31 6 views
79

J'ai deux tables avec les champs date et id. Je veux rejoindre sur les deux champs. J'ai essayéMySQL comment joindre des tables sur deux champs

JOIN t2 ON CONCAT(t1.id, t1.date)=CONCAT(t2.id, t2.date) 

cela fonctionne, mais il est très lent. Y a-t-il une meilleure manière de faire cela?

Répondre

137
JOIN t2 ON t1.id=t2.id AND t1.date=t2.date 
28
JOIN t2 ON (t2.id = t1.id AND t2.date = t1.date) 
18
SELECT * 
FROM t1 
JOIN t2 USING (id, date) 

peut-être vous aurez besoin d'utiliser JOIN INNEER ou où t2.id n'est pas nul si vous voulez obtenir des résultats correspondant à seulement deux conditions

+0

Fondamentalement, la lenteur est parce que calcule béton nouvelles valeurs qui n'ont pas d'index, les conditions directes devraient donc être plus rapides. si même cette requête serait encore lente, vérifiez que les index existent, et parfois la création d'un index pour 2 champs est également logique. –