mysql - 简单的sql查询,包含3张表

标签 mysql postgresql-9.3

考虑以下包含 3 个表的数据库: 人、汽车、人_汽车(连接表)。 每个字段都有如下所述的字段:

persons: id, phone, address
cars: id, model, manufacturer
persons_cars: id, id_car, id_person 

对于当前情况,请考虑所有需要 id 的字段 varchar(当然是主键和外键)。

看起来像一个查询,它返回拥有同一制造商的多辆汽车(至少两辆)的人的id。 (制造商可以相同,例如“大众”、“沃尔沃”、“本田”等)。是否可以在一个查询中完成此操作?

最佳答案

这里有一个简单的方法来做到这一点。我们可以按人员聚合 persons_cars 表,然后将制造商总数与不同制造商数量进行比较。如果前者大于后者,那么我们可以假设存在重复的制造商,即该人拥有同一制造商的两辆或更多汽车。

SELECT pc.id_person
FROM persons_cars pc
INNER JOIN cars c
    ON pc.id_car = c.id
GROUP BY pc.id_person
HAVING COUNT(*) > COUNT(DISTINCT c.manufacturer);

您同时使用 MySQL 和 Postgres 进行标记,尽管此答案应该在任一数据库上运行而不会出现任何问题。

关于mysql - 简单的sql查询,包含3张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53476260/

相关文章:

postgresql - 将列从 timestamp 更改为 timestamptz 会锁定表吗?

sql - 分组时如何联合数组?

mysql - SQL 盘点库存问题

mysql - mySQL 的外键

Mysql - 根据条件删除重复行的sql查询

postgresql - 在 PostgreSQL timestamptz 类型中保留时区

postgresql - 使用动态字段名称触发

python - 运行时实体上的 sqlalchemy 动态模式

MySQL tinyint 到 bool 值

php - 没有选择正确的行进行编辑