【发布时间】:2019-12-01 10:02:49
【问题描述】:
所以我有一个表Car(Car_id, Value, Make),另一个表Person(Person_id, Name) 和第三个表将两者连接在一起PerCar(Car_id, Person_id)。
所以我有这个相关的子查询:
SELECT MAKE, VALUE
FROM CAR WHERE VALUE > (SELECT AVG(VALUE) FROM CAR C WHERE C.CAR_ID = CAR_ID);
如果我还想显示人名,这是否也是有效的相关子查询:
SELECT Car.Make, Car.Value, Person.Name
FROM PerCar NATURAL JOIN Car
NATURAL JOIN Person where Car.Value > (SELECT AVG(VALUE) FROM Car);
【问题讨论】:
-
你的两个查询返回不同的结果,#1 是一个 Correlated Subquery,返回的行的值大于相关 CAR_ID 的平均值但是 2# 返回的行的值大于 所有汽车,它不相关,它是标量
-
其实你的第一个Select不是Correlated Subquery,因为内表和外表没有关联,
WHERE C.CAR_ID = CAR_ID和1=1一样,应该是FROM CAR C WHERE VALUE > (SELECT AVG(VALUE) FROM CAR C2 WHERE C.CAR_ID = C2.CAR_ID) -
避免像瘟疫一样的自然连接。
-
@TheImpaler:在识别为“The Impaler”的同时,竭尽全力告诉某人避免一种罕见且易于治疗的疾病 - 您目前正在采取哪些措施来避免真正的瘟疫?是这样想的。
-
@onedaywhen LOL
标签: sql postgresql correlated-subquery