我目前有以下内容:
表镇:
表供应商:
以下查询返回每个城镇的供应商数量:
SELECT t.id, t.name, count(s.id) as NumSupplier
FROM Town t
INNER JOIN Suppliers s ON s.town_id = t.id
GROUP BY t.id, t.name
我现在想在查询中引入另一个表,Supplier_vehicles。供应商可以拥有许多车辆:
Table Supplier_vehicles:
现在,NumSupplier字段需要返回具有任何给定vehicle_id(IN条件)的每个城镇的供应商数量:
以下查询将简单地带回具有任何给定vehicle_id的供应商:
SELECT * FROM Supplier s, Supplier_vehicles v WHERE s.id = v.supplier_id AND v.vehicle_id IN (1, 4, 6)
我需要将其整合到第一个查询中,以便它返回具有任何给定vehicle_id的供应商数量。
答案 0 :(得分:1)
SELECT t.id, t.name, count(s.id) as NumSupplier
FROM Town t
INNER JOIN Suppliers s ON s.town_id = t.id
WHERE s.id IN (SELECT sv.supplier_id
FROM supplier_vehicles sv
WHERE sv.vehicle_id IN (1,4,6))
GROUP BY t.id, t.name
或者您可以执行INNER JOIN
(因为您的供应商加入是INNER,但这将删除没有这些车辆的供应商的城镇)并将COUNT(s.id)
更改为COUNT(DISTINCT s.id)
答案 1 :(得分:0)
如果我没记错的话,你可以把你的第二个查询放在LEFT OUTER JOIN条件下。
例如,您可以执行类似
的操作... LEFT OUTER JOIN(SELECT * FROM Suppler s,Supplier_vehicles ......)s ON s.town_id = t.id
通过这种方式,您将两个查询“集成”或组合成一个。如果有效,请告诉我。
答案 2 :(得分:0)
SELECT t.name, count(s.id) as NumSupplier
FROM Town t
LEFT OUTER JOIN Suppliers s ON t.id = s.town_id
LEFT OUTER JOIN Supplier_vehicles v ON s.id = v.supplier_id
WHERE v.vehicle_id IN (1,4,6)
GROUP BY t.name