【发布时间】:2015-10-31 20:33:06
【问题描述】:
我有桌子:
Person(SSN, name, address)
Car(license, year, model)
Accident(license, accident-date, driver, damage-amount)
Owns(SSN, license)
问题问:
查找涉及不止一次事故的所有汽车的牌照号码(请勿返回重复项)。
答案之一是:
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 中的元组具有不同的事故日期,即使这两个元组具有不同的许可证。那么这不应该是错误的吗?
编辑:假设汽车一天不能发生超过一次事故。
【问题讨论】:
-
这个“答案”是完全错误的,如果
Accident中有多个日期,它会返回所有行。正如你已经说过的,缺少AND A1.license = A2.license。 -
这适用于哪个 RDBMS?请添加标签以指定您使用的是
mysql、postgresql、sql-server、oracle还是db2- 或其他完全不同的东西。 -
问题没有具体说明,但是由于我的班是学mysql的,所以我已经标记了mysql。
-
答案是不正确的,除非你假设一辆车不能在同一天发生两次事故。
-
对不起,我应该这么说的。假设一辆汽车一天不能发生一次以上的事故。
标签: mysql sql subquery correlated-subquery