Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

pilih kueri dan hitung berdasarkan kondisi

Saya tidak melihat alasan mengapa Anda harus menggunakan subquery. Saya yakin Anda cukup menggabungkan fi_business dan fi_business_subcategory ke faktor tabel dalam kurung tunggal.

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

Saya telah memeriksa bahwa ini adalah SQL yang valid untuk struktur tabel Anda. Saya kira kemungkinan besar itu akan menghasilkan hasil yang diinginkan, meskipun biola Anda belum berisi data apa pun. Lihat manual tentang sintaks GABUNG untuk detail tentang di mana Anda dapat menggunakan tanda kurung dalam gabungan.

Anda mungkin juga bertanya pada diri sendiri apakah Anda benar-benar membutuhkan semua gabungan untuk dibiarkan bergabung. Menulis sesuatu menggunakan gabungan dalam akan jauh lebih mudah.

Saat gabungan dieksekusi dari kiri ke kanan, Anda dapat melakukan gabungan bagian dalam terlebih dahulu, diikuti dengan urutan kanan bergabung. Ini menghindari tanda kurung:

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. Menangani kumpulan hasil besar dari mysql dengan memori terbatas

  2. skema mysqldump saja, pembaruan skema tanpa drop

  3. Cetak info debug dari prosedur tersimpan di MySQL

  4. Dua gabungan kiri memberi saya data yang tidak benar (data ganda?) dengan MySQL

  5. cara membuka banyak model/database di meja kerja mysql