Mysql
 sql >> Database >  >> RDS >> Mysql

Come abbinare i record associati a un insieme specifico di altri record?

Ci sono alcuni modi per raggiungere questo obiettivo, uno potrebbe essere quello di raggruppare i risultati e utilizzare HAVING per confrontare il conteggio dei tag distinti

$query = $this->Users
    ->find()
    ->matching('Tags', function ($query) {
        return $query->where(['Tags.name IN' => ['Tag1', 'Tag2']]);
    })
    ->group('Users.id')
    ->having([
        $this->Users->query()->newExpr('COUNT(DISTINCT Tags.name) = 2')
    ]);

Questo selezionerà solo gli utenti che hanno due tag distinti, che possono essere solo Tag1 e Tag2 poiché questi sono gli unici a cui si sta unendo. Nel caso in cui il name colonna è unica, puoi invece contare sulla chiave primaria.

Il IN a proposito. è essenzialmente lo stesso del tuo OR condizioni (il sistema di database espanderà IN a OR condizioni di conseguenza).