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

vyberte dotaz a počítejte na základě podmínky

Nevidím důvod, proč byste měli používat poddotaz. Věřím, že můžete jednoduše kombinovat fi_business a fi_business_subcategory na jeden faktor tabulky v závorkách.

SELECT
    c.id, 
    c.name,
    c.slug,
    sc.id,
    sc.name,
    sc.slug,
    COUNT(bsc.id) AS business_count
FROM
    fi_category c
LEFT JOIN
    fi_subcategory sc ON c.id = sc.category_id AND (sc.deleted_at IS NULL)
LEFT JOIN (
        fi_business b
    INNER JOIN
        fi_business_subcategory bsc ON b.id = bsc.business_id AND (bsc.deleted_at IS NULL)
    INNER JOIN
        fi_suburb su ON su.id = b.suburb_id AND su.city_id = 1
    ) ON sc.id = bsc.subcategory_id
WHERE 
    (c.deleted_at IS NULL) 
GROUP BY 
    c.id, sc.id

zkontroloval(a) jsem že toto je platný SQL pro vaši strukturu tabulky. Myslím, že je velká šance, že to přinese požadovaný výsledek, i když vaše housle ještě neobsahují žádná data. Viz příručku k syntaxi JOIN podrobnosti o tom, kde můžete použít závorky ve spojení.

Můžete si také položit otázku, zda opravdu potřebujete, aby všechna spojení zůstala spojeními. Psaní věcí pomocí vnitřních spojení by bylo mnohem jednodušší.

Protože se spojení provádějí zleva doprava, můžete nejprve provést vnitřní spojení a poté následovat sekvence doprava se připojí. Tím se vyhnete závorkám:

SELECT
    c.id cat_id,
    c.name cat_name,
    c.slug cat_slug,
    sc.id sub_id,
    sc.name sub_name,
    sc.slug sub_slug,
    COUNT(bsc.id) AS business_count
FROM
    fi_business b
INNER JOIN
    fi_business_subcategory bsc ON b.id = bsc.business_id
    AND (b.deleted_at IS NULL) AND (bsc.deleted_at IS NULL)
INNER JOIN
    fi_suburb su ON su.id = b.suburb_id AND su.city_id = 1
RIGHT JOIN
    fi_subcategory sc ON sc.id = bsc.subcategory_id
RIGHT JOIN
    fi_category c ON c.id = sc.category_id AND (sc.deleted_at IS NULL)
WHERE
    (c.deleted_at IS NULL)
GROUP BY
    c.id, sc.id


  1. Jak změnit heslo root MySQL na výchozí?

  2. Jak spustit skript Oracle sql prostřednictvím kódu Java

  3. Co jsou výpisy připravené na straně klienta?

  4. Jak otevřít databázi v exkluzivním režimu v Accessu 2016