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

Získávání výsledků dotazu z tabulek 2 db, i když druhá tabulka nemá žádné odpovídající položky

O.P. řekl:

Problém je v tom, že where klauzule filtruje sadu výsledků, takže váš test na req.status 2 nebo 5 vyhodí cokoli, kde je req.status je null, protože žádný řádek neodpovídá tabulce applications .

Obecné, teoretické (protože nic jiného než triviální implementace by ve skutečnosti nikdy nic takového neudělalo) pořadí operací pro select prohlášení je:

  • Vytvořte úplný kartézský součin každé tabulky uvedené v from doložka.
  • Odfiltrujte to použitím zadaného join kritéria a eliminované řádky, které neprošly zadanými testy.
  • Použijte kritéria filtru uvedená v where klauzule, odstranění řádků, které neprošly zadanými testy.
  • Seřaďte sadu výsledků podle výrazů zadaných v group by klauzule a rozdělte sadu výsledků do skupin.
  • Každou takovou skupinu sbalte do jednoho řádku a vypočítejte hodnotu všech zadaných agregačních funkcí.
  • Odeberte ze sady výsledků všechny sloupce, které nejsou uvedeny v select seznam sloupců výpisů.
  • Seřaďte tyto konečné výsledky podle sloupců/výrazů uvedených v order by doložka.

Můžete udělat jednu ze dvou věcí:

  • změňte svůj dotaz tak, aby testoval nulitu:

    where...( req.status is null OR req.status in (2,5) )...
    
  • přesuňte test proti req.status ke kritériím spojení:

    left join requests req on req.app_id =  apps.id
                          and req.uid    =  {$user_id}
                          and req.status in (2,5)
    


  1. C++ vazby pro MySQL

  2. Funkce JSON_OBJECT() v Oracle

  3. Připravené příkazy MySQL

  4. Konfigurace databáze MySQL v samostatné třídě