sql >> Databáze >  >> RDS >> Mysql

Jak spárovat záznamy, které jsou spojeny s konkrétní sadou jiných záznamů?

Existuje několik způsobů, jak toho dosáhnout, jedním by bylo seskupit výsledky a použít HAVING pro porovnání počtu různých značek

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

Tím vyberete pouze ty uživatele, kteří mají dvě odlišné značky, které mohou být pouze Tag1 a Tag2 protože to jsou jediné, které se připojují. V případě name je jedinečný, můžete místo toho počítat s primárním klíčem.

IN Mimochodem. je v podstatě stejný jako váš OR podmínek (databázový systém se rozbalí IN na OR odpovídajícím podmínkám).




  1. Jak opravit MySql:velikost sloupce indexu je příliš velká (migrace Laravel)

  2. mySQL DataSource v sadě Visual Studio 2012

  3. Standardní číselné formátovací řetězce Podporované FORMAT() v SQL Server

  4. Kvíz o výkonu a ladění Oracle