Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

chọn truy vấn và đếm dựa trên điều kiện

Tôi không hiểu tại sao bạn phải sử dụng truy vấn con. Tôi tin rằng bạn có thể chỉ cần kết hợp fi_businessfi_business_subcategory thành một hệ số trong bảng có dấu ngoặc đơn.

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

Tôi đã đã kiểm tra rằng đây là SQL hợp lệ cho cấu trúc bảng của bạn. Tôi đoán rất có thể nó sẽ mang lại kết quả mong muốn, mặc dù fiddle của bạn chưa chứa bất kỳ dữ liệu nào. Xem hướng dẫn về cú pháp THAM GIA để biết chi tiết về nơi bạn có thể sử dụng dấu ngoặc đơn trong một phép nối.

Bạn cũng có thể tự hỏi mình liệu bạn có thực sự cần tất cả các phép nối để được phép nối trái hay không. Viết mọi thứ bằng cách sử dụng các phép nối bên trong sẽ dễ dàng hơn nhiều.

Khi các phép nối được thực thi từ trái sang phải, bạn có thể thực hiện các phép nối bên trong trước, sau đó là một chuỗi phải tham gia. Điều này tránh các dấu ngoặc đơn:

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. Mysql sử dụng loại băm nào?

  2. Hibernate Exception trên MySQL Cross Join Query

  3. mysql_fetch_array () trả về 'đối số được cung cấp không phải là tài nguyên kết quả MySQL hợp lệ'

  4. Sao chép hàng nhưng với id mới

  5. mysql chèn một lúc vào 2 bảng có khóa chính và khóa ngoại