SQL 相同 table 的相关子查询

SQL correlated subquery of the same table

我有桌子:

Person(SSN, name, address)
Car(license, year, model)
Accident(license, accident-date, driver, damage-amount)
Owns(SSN, license)

问题是:

找出涉及不止一次事故的所有汽车的车牌号(不要 RETURN 重复)。

其中一个答案是:

SELECT DISTINCT A1.license 
FROM Accident A1 
WHERE A1.license IN (SELECT A2.license 
                     FROM Accident A2 
                     WHERE A1.accident-date <> A2.accident-date)

它从不检查相关子查询中的 A1.license = A2.license。因此,据我了解,子查询检查 A1 中的元组是否与 A2 中的元组具有不同的事故日期,即使这两个元组具有不同的许可证。所以这不应该是错误的吗?

编辑:假设一辆汽车一天内不会发生超过一次事故。

实际上 IN 操作员正在检查许可证是否相等。让我们做一个测试。假设 Accidents table 包含行:

License  AccidentDate
L1       20151001
L1       20151020
L2       20151025

为外部查询的每一行计算相关子查询。想象一个在行上循环的游标。

因为 row1 A.LicenceL1。内部子查询只检查不同于 20151001 的日期,它会找到 row2row3(L1, L3)。所以 A.LicenceL1 在内部子查询的结果集中,它将在最终结果中返回。第二排也是。但是 row3 不会被包括在内,因为除了 20151025 之外的日期没有 L2。所以查询正确。