MySQL Join Query(可能有两个内连接)

时间:2010-07-27 11:32:57

标签: mysql join aggregate-functions

我目前有以下内容:

表镇:

  • ID
  • 名称
  • 区域

表供应商:

  • ID
  • 名称
  • town_id

以下查询返回每个城镇的供应商数量:

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:

  • ID
  • supplier_id
  • vehicle_id

现在,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的供应商数量。

3 个答案:

答案 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