Mysql
 sql >> Baza danych >  >> RDS >> Mysql

wybierz zapytanie i policz na podstawie warunku

Nie widzę powodu, dla którego powinieneś używać podzapytania. Uważam, że możesz po prostu połączyć fi_business i fi_business_subcategory do pojedynczego współczynnika tabeli w nawiasach.

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

Sprawdziłem sprawdziłem że jest to poprawny kod SQL dla Twojej struktury tabeli. Myślę, że są spore szanse, że przyniesie pożądany rezultat, nawet jeśli twoje skrzypce nie zawierają jeszcze żadnych danych. Zobacz podręcznik dotyczący składni JOIN aby uzyskać szczegółowe informacje o tym, gdzie możesz używać nawiasów w połączeniu.

Możesz również zadać sobie pytanie, czy naprawdę chcesz, aby wszystkie złączenia pozostały złączeniami. Pisanie rzeczy za pomocą sprzężeń wewnętrznych byłoby znacznie łatwiejsze.

Ponieważ sprzężenia są wykonywane od lewej do prawej, możesz najpierw wykonać sprzężenia wewnętrzne, a następnie sekwencję prawo łączy. Pozwala to uniknąć nawiasów:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połączenie tabeli GeoIP z tabelą adresów IP w MySQL

  2. Jak wyświetlić obraz mysql blob w html za pomocą Vuejs?

  3. Utrzymanie porządku w zapytaniu MySQL IN

  4. Jak stworzyć usługę mysql kubernetes z lokalnie zamontowanym wolumenem danych?

  5. Pobierz nazwy kolumn i wartości w pętli for PHP