SQL相关表的相关子查询

时间:2015-10-31 20:33:06

标签: mysql sql subquery correlated-subquery

我有桌子:

Array<Vector2> poly

问题是:

查找涉及多个事故的所有车辆的许可证号码(请勿返回重复)。

其中一个答案是:

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

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

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

1 个答案:

答案 0 :(得分:1)

实际上IN运营商正在检查许可证是否相等。让我们做一个测试。说Accidents表包含行:

License  AccidentDate
L1       20151001
L1       20151020
L2       20151025

针对外部查询的每一行评估相关子查询。想象一下在行上循环的游标。

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