sql >> Database >  >> RDS >> Mysql

Hoe records te matchen die zijn gekoppeld aan een specifieke set andere records?

Er zijn een paar manieren om dit te bereiken, een zou zijn om de resultaten te groeperen en HAVING . te gebruiken om het aantal verschillende tags te vergelijken

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

Hiermee worden alleen die gebruikers geselecteerd die twee verschillende tags hebben, die alleen Tag1 . kunnen zijn en Tag2 aangezien dit de enige zijn waaraan wordt deelgenomen. In het geval dat de name kolom uniek is, kunt u in plaats daarvan op de primaire sleutel rekenen.

De IN btw. is in wezen hetzelfde als uw OR voorwaarden (het databasesysteem breidt uit IN naar OR voorwaarden dienovereenkomstig).




  1. SQLite-transactie

  2. Voeg meerdere rijen in SQLite-fout in (foutcode =1)

  3. MySQL-servicevensters stoppen

  4. Hoe voeg ik op de juiste manier meerdere rijen in PG in met node-postgres?