我有3个相关的表格:
business
id
name
inspection
id
business_id
date
violation
id
inspection_id
title
我想出去:
[business.id,Count(Inspections),Count(Violations)]
其中Count(Inspections)是此商家所拥有的检查总数,而Count(违规)是该商家所有检查的违规总数。
我可以在一个查询中做一个或另一个,但我不确定如何一次性完成这两个。
SELECT b.id, COUNT(i.id)
FROM inspections_business b, inspections_inspection i
WHERE
b.id = i.business_id
GROUP BY b.id
SELECT b.id, COUNT(v.id)
FROM inspections_business b, inspections_inspection i, inspections_violation v
WHERE
b.id = i.business_id
AND i.id = v.inspection_id
GROUP BY b.id
答案 0 :(得分:2)
使用OUTER连接:
SELECT b.id,
COUNT(i.id) AS num_inspections,
COUNT(v.id) AS num_violations
FROM BUSINESS b
LEFT JOIN INSPECTION i ON i.business_id = b.id
LEFT JOIN VIOLATION v ON v.inspection_id = i.id
GROUP BY b.id
您的查询使用ANSI-89连接语法,其中连接条件位于WHERE
子句中。它已被ANSI-92语法取代。没有性能优势,但是当每个数据库供应商都有自己的ANSI-89的OUTER连接语法时,一致支持OUTER join语法。