sql >> Databasteknik >  >> RDS >> Mysql

Hur väljer man från två tabeller i MySQL även om inte alla rader i en tabell har korrespondenter i den andra?

För att göra detta behöver du en yttre sammanfogning. Förresten, sättet du skriver din fråga med en implicit koppling är föråldrat och rekommenderas inte längre. Användning av nyckelordet JOIN rekommenderas. Detta gör det också lättare att ändra en inre fog till en yttre fog.

FROM categories AS sc
LEFT JOIN products AS s
ON s.ownerid=sc.id

För att returnera 0 istället för NULL använd IFNULL(..., 0) . Hela frågan blir:

SELECT
    sc.*,
    IFNULL(MIN(s.price), 0) AS minp,
    IFNULL(MAX(s.price), 0) AS maxp
FROM categories AS sc
LEFT JOIN products AS s
ON s.ownerid = sc.id
GROUP BY sc.id

Du kanske också vill överväga om det skulle vara bättre att returnera standardvärdet NULL istället för 0 för kategorier som inte har några produkter.



  1. Samla in prestandadata med verktyget SQLDiag | Felsökning av SQL Server-prestanda -6

  2. Hur man filtrerar rader med nollvärden i Select Statement i SQL Server - SQL Server / TSQL Tutorial Del 110

  3. Returnera inkrementvärdet för en identitetskolumn i SQL Server

  4. Exempel på SQL Server FÖR JSON PATH (T-SQL)