MySQL comment joindre des tables sur deux champs

102

J'ai deux tables avec dateetid champs. Je veux rejoindre les deux domaines. j'ai essayé

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

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

pédale
la source

Réponses:

179
JOIN t2 ON t1.id=t2.id AND t1.date=t2.date
womble
la source
39
JOIN t2 ON (t2.id = t1.id AND t2.date = t1.date)
Chad Birch
la source
27
SELECT * 
FROM t1
JOIN t2 USING (id, date)

vous devrez peut-être utiliser INNEER JOIN ou où t2.id n'est pas nul si vous voulez que les résultats ne correspondent qu'aux deux conditions

Eugène Kaurov
la source
1
Fondamentalement, la lenteur est due au fait que Concrete calcule de nouvelles valeurs sans index, les conditions directes devraient donc être plus rapides. si même cette requête serait à nouveau lente, vérifiez si les index existent, et parfois la création d'un index pour 2 champs a également du sens.
Eugene Kaurov