Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie werden Datensätze abgeglichen, die mit einem bestimmten Satz anderer Datensätze verknüpft sind?

Es gibt mehrere Möglichkeiten, dies zu erreichen, eine wäre, die Ergebnisse zu gruppieren und HAVING zu verwenden um die Anzahl der unterschiedlichen Tags zu vergleichen

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

Dadurch werden nur die Benutzer ausgewählt, die zwei unterschiedliche Tags haben, die nur Tag1 sein können und Tag2 da nur diese mitmachen. Falls der name Spalte eindeutig ist, können Sie sich stattdessen auf den Primärschlüssel verlassen.

Der IN übrigens. ist im Wesentlichen dasselbe wie Ihr OR Bedingungen (das Datenbanksystem erweitert IN zu OR Bedingungen entsprechend).