Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como combinar registros associados a um conjunto específico de outros registros?


Existem algumas maneiras de conseguir isso, uma delas seria agrupar os resultados e usar HAVING para comparar a contagem das tags distintas
$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')
    ]);

Isso selecionará apenas os usuários que tiverem duas tags distintas, que só podem ser Tag1 e Tag2 pois estes são os únicos que estão sendo unidos. Caso o name coluna é única, você pode contar com a chave primária.

O IN por falar nisso. é essencialmente igual ao seu OR condições (o sistema de banco de dados expandirá IN para OR condições em conformidade).