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

Jak vybrat ze dvou tabulek v MySQL, i když ne všechny řádky v jedné tabulce mají korespondenty ve druhé?

K tomu potřebujete vnější spojení. Mimochodem, způsob, jakým píšete dotaz s implicitním spojením, je zastaralý a již se nedoporučuje. Doporučuje se použít klíčové slovo JOIN. To také usnadňuje změnu vnitřního spojení na vnější spojení.

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

Chcete-li vrátit 0 místo NULL, použijte IFNULL(..., 0) . Celý dotaz se změní na:

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

Můžete také zvážit, zda by nebylo lepší vrátit výchozí hodnotu NULL místo 0 pro kategorie, které nemají žádné produkty.



  1. Proč SQL Server ztrácí milisekundu?

  2. Volání uložené procedury Oracle z C#?

  3. Postgresql UUID podporované Hibernatem?

  4. Vytvořte tabulku dvou typů v PostgreSQL