包含 3 个表的简单 sql 查询
Simple sql query with 3 tables
考虑以下具有 3 tables 的数据库:
人,车,persons_cars(加入table)。
每个都有下面描述的字段:
persons: id, phone, address
cars: id, model, manufacturer
persons_cars: id, id_car, id_person
对于当前情况,考虑所有字段 varchar
期望 id
(当然是主键和外键)。
returns 我是 id
拥有同一制造商的多辆汽车(至少两辆)的人的查询。 (因为制造商可以相同,例如 'volkswagen'、'volvo'、'honda' 等)。是否可以在一个查询中执行此操作?
这是一个简单的方法。我们可以按人聚合 persons_cars
table,然后将制造商总计数与不同制造商计数进行比较。如果前者大于后者,那么我们可以假设存在重复制造商,即此人拥有同一制造商的两辆或多辆汽车。
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 进行了标记,尽管这个答案应该 运行 在任何一个数据库上都没有任何问题。
考虑以下具有 3 tables 的数据库: 人,车,persons_cars(加入table)。 每个都有下面描述的字段:
persons: id, phone, address
cars: id, model, manufacturer
persons_cars: id, id_car, id_person
对于当前情况,考虑所有字段 varchar
期望 id
(当然是主键和外键)。
returns 我是 id
拥有同一制造商的多辆汽车(至少两辆)的人的查询。 (因为制造商可以相同,例如 'volkswagen'、'volvo'、'honda' 等)。是否可以在一个查询中执行此操作?
这是一个简单的方法。我们可以按人聚合 persons_cars
table,然后将制造商总计数与不同制造商计数进行比较。如果前者大于后者,那么我们可以假设存在重复制造商,即此人拥有同一制造商的两辆或多辆汽车。
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 进行了标记,尽管这个答案应该 运行 在任何一个数据库上都没有任何问题。