Mam relację m: n między użytkownikami i tagami. Jeden użytkownik może mieć m tagów, a jeden tag może należeć do n użytkowników. Tabele wyglądać tak:SQL SELECT o relacji m: n
USER:
ID
USER_NAME
USER_HAS_TAG:
USER_ID
TAG_ID
TAG:
ID
TAG_NAME
Powiedzmy, że muszę wybrać wszystkich użytkowników, którzy mają znaczniki „Apple”, „Orange” AND „banana”. Jaki byłby najskuteczniejszy sposób osiągnięcia tego przy użyciu SQL (MySQL DB)?
, która z pewnością nie jest najskuteczniejsza, ponieważ zgromadzi wszystkie rekordy. Na przykład. jeśli żaden użytkownik nie spełnia kryteriów, wiele bezużytecznej pracy zostanie wykonanych 3 selfjoin to skuteczny sposób na przejście na – noonex
'@ noonex': na danych rzeczywistych (wielu użytkowników, dużo tagów, duża liczność użytkowników) jest to efektywne droga. 'tag_name IN (...)' jest godnym pożałowania warunkiem, zagreguje tylko rekordy z tagami matematycznymi. A co, jeśli chcesz, aby zapytanie pasowało do znaczników '4' lub' 20'? Przy self-joinach będziesz musiał przepisać strukturę zapytania, używając 'GROUP BY' tylko parametrów. – Quassnoi