sql >> Databasteknik >  >> RDS >> Mysql

Hur matchar man poster som är associerade med en specifik uppsättning andra poster?

Det finns några sätt att uppnå detta, ett skulle vara att gruppera resultaten och använda HAVING för att jämföra antalet distinkta taggar

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

Detta kommer bara att välja de användare som har två distinkta taggar, som bara kan vara Tag1 och Tag2 eftersom dessa är de enda som ansluts. I fall name kolumnen är unik, du kan räkna med primärnyckeln istället.

IN btw. är i huvudsak samma som din OR villkor (databassystemet expanderar IN till OR villkor i enlighet därmed).




  1. MySQL med Sum och Case

  2. Uppdatera databas med flera SQL-statement

  3. Hur dumpar man endast specifika tabeller från MySQL?

  4. Hur man duplicerar en MySQL-databas på samma server