具有3个表的简单SQL查询

时间:2018-11-26 07:14:09

标签: mysql postgresql-9.3

考虑以下具有3个表的数据库: 人,汽车,人车(联接表)。 每个字段及其字段如下所述:

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

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

看起来像一个查询,向我返回拥有同一制造商的多辆汽车(至少两辆)的人的id。 (制造商可以是相同的,例如“大众”,“沃尔沃”,“本田”等)。可以在一个查询中做到这一点吗?

1 个答案:

答案 0 :(得分:1)

这是执行此操作的简单方法。我们可以按人汇总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,尽管此答案应该可以在任何一个数据库上运行而没有任何问题。