给出这些表:
SELECT COUNT(DISTINCT a.report_number), c.model
FROM accident as a, car as c, participated as p
GROUP BY c.model
HAVING a.report_number= p.report_number and c.car_regnum=p.car_regnum
and a.date>= '2016-01-01'
ORDER BY DESC
并且:
SELECT COUNT(DISTINCT accident.report_number), model
FROM accident NATURAL JOIN participated NATURAL JOIN car
WHERE date >= '2016-01-01'
GROUP BY model;
ORDER BY DESC
答案 0 :(得分:0)
看起来它们执行相同的逻辑,因此应该等效。
不过,我不会考虑使用第一个-逗号连接太容易搞砸了,而且四分之一世纪以来,显式连接语法已成为标准的一部分。
第二个我很满意,但是很多人对NATURAL JOIN
感到“厌恶”。如果您在一个训练有素的团队中工作,NATURAL JOIN
很棒,其中每个列的名称仅代表一件事,但是在许多组织中,名称(尤其是像Description
这样的通用名称)可能会被重用跨表,并且不应该成为联接条件的一部分。
因此,大多数人(据我所知)可能更喜欢以下方式:
SELECT
model,
COUNT(DISTINCT a.report_number)
FROM
accident a
INNER JOIN
participated p
ON
a.report_number = p.report_number
INNER JOIN
car c
ON
p.car_regnum = c.car_regnum
WHERE
date >= '2016-01-01'
GROUP BY
model;