MySQL 连接查询

标签 mysql join aggregate-functions

我需要通过连接两个表来查询数据库。这是我所拥有的:

table 上小镇:

  • 编号
  • 姓名
  • 地区

表格供应商:

  • 编号
  • 姓名
  • town_id

我目前有以下查询,它输出属于给定区域的所有城镇:

SELECT id, name FROM Town WHERE region = 'North West';

现在我需要扩展这个查询并创建两个进一步的查询,如下所示:

  • 输出每个城镇的供应商数量

  • 仅输出有 1 个或多个供应商的城镇

如果有帮助,我正在为我的脚本使用 PHP。我知道我可以使用 PHP 获取这些数据,但就性能而言,如果在 MySQL 中完成可能会更好。

编辑(2010 年 7 月 27 日):

我现在需要最后一次扩展这个 - 还有另一个名为 Supplier_vehicles 的表:

  • 编号
  • 供应商编号
  • 车辆编号

一个 Supplier 可以有很多 Supplier_vehicles。计数(在本例中为 NumSupplier)现在需要包含给定城镇中具有任何给定 vehicle_id(IN 条件)的供应商总数:

SELECT * FROM Supplier s, Supplier_vehicles v WHERE s.id = v.supplier_id AND v.vehicle_id IN (1, 4, 6)

需要将上述查询整合到已有的JOIN查询中。

最佳答案

计算供应商的数量。

SELECT t.id, t.name, count(s.id) as NumSupplier
FROM Town t
LEFT OUTER JOIN Suppliers s ON s.town_id = t.id
GROUP BY t.id, t.name

只有至少有一个供应商的城镇

SELECT DISTINCT t.id, t.name
FROM Town t
INNER JOIN Suppliers s ON s.town_id = t.id

你是 100% 正确的,最好的地方是 SQL 查询。

关于MySQL 连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3319966/

相关文章:

sql - 在同一查询中使用两个聚合函数

c++ - 我可以使用 QSortFilterProxyModel 创建摘要/聚合模型吗?

mysql - 如何将多个详细信息行的列汇总到单个列中?

mysql - 如何将 GROUP_CONCAT 添加到 LEFT JOIN 查询?

mysql - 添加累积(运行总计?)列的优化?

mysql - 使用 codeigniter 创建多级数组

mysql - 左加入所有结果

java - Java 7 中是否内置了聚合类型或选择类型的函数?

sql - SQL 中 1 总是等于 '1' 吗?

php拍卖采用相同时间提交的同等出价