Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:relacja wiele do wielu z wieloma warunkami AND

Możesz nieznacznie zmienić bieżące zapytanie, aby uzyskać żądane wyniki:

SELECT i.id, i.name    -- OK to select name assuming id is the PK
FROM item i
LEFT JOIN relation r
    ON i.id = r.item_id
LEFT JOIN tag t
    ON t.id = r.tag_id
WHERE t.tag IN ('sport', 'leather')
GROUP BY i.id
HAVING COUNT(DISTINCT t.tag) = 2;

Spowoduje to zwrócenie wszystkich elementów, które mają zarówno sport i leather Tagi. Działa poprzez agregację według pozycji (tak jak już to robiłeś), ale następnie potwierdzanie w HAVING klauzula, że ​​istnieją dwa różne pasujące znaczniki. Ponieważ ograniczyliśmy się tylko do tych dwóch tagów w WHERE klauzula, jeśli HAVING sprawdzenie przechodzi po agregacji, oznacza to, że element jest zgodny.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd składni prostej kwerendy tabeli?

  2. Formularz nie zapisuje się w bazie danych

  3. jak używać funkcji mysql now() w cakephp dla pól daty?

  4. Hibernacja Nie można dodać lub zaktualizować wiersza podrzędnego:ograniczenie klucza obcego nie powiodło się

  5. Sprawdź, czy nazwa użytkownika istnieje przy użyciu PHP PDO