MySQL, jak łączyć tabele na dwóch polach

102

Mam dwie tabele z polami datei id. Chcę dołączyć na obu polach. próbowałem

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

to działa, ale jest bardzo powolne. czy jest lepszy sposób na zrobienie tego?

pedalpete
źródło

Odpowiedzi:

180
JOIN t2 ON t1.id=t2.id AND t1.date=t2.date
womble
źródło
39
JOIN t2 ON (t2.id = t1.id AND t2.date = t1.date)
Chad Birch
źródło
27
SELECT * 
FROM t1
JOIN t2 USING (id, date)

być może będziesz musiał użyć INNEER JOIN lub gdzie t2.id nie jest zerowe, jeśli chcesz, aby wyniki pasowały tylko do obu warunków

Eugene Kaurov
źródło
1
Zasadniczo powolność wynika z tego, że beton oblicza nowe wartości, które nie mają indeksów, więc bezpośrednie warunki powinny być szybsze. jeśli nawet to zapytanie byłoby znowu wolne, sprawdź, czy istnieją indeksy, a czasami ma sens utworzenie jednego indeksu dla 2 pól.
Eugene Kaurov