sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo hacer coincidir los registros que están asociados con un conjunto específico de otros registros?

Hay algunas formas de lograr esto, una sería agrupar los resultados y usar HAVING para comparar el recuento de las distintas etiquetas

$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')
    ]);

Esto seleccionará solo aquellos usuarios que tengan dos etiquetas distintas, que solo pueden ser Tag1 y Tag2 ya que estos son los únicos que se están incorporando. En caso de que el name columna es única, puede confiar en la clave principal en su lugar.

El IN por cierto. es esencialmente lo mismo que su OR condiciones (el sistema de base de datos se expandirá IN a OR condiciones en consecuencia).