是否可以将子查询与内联视图相关联?
假设我们有一个简单的数据库来存储有关宠物主人的信息。
SELECT p.name,
p.surname,
p.num_of_pets
FROM (SELECT person.id_person id_person,
person.name name,
person.surname surname,
COUNT(DISTINCT person_pets.id_pet) num_of_pets
FROM person
LEFT JOIN person_pets
ON person.id_person=person_pets.id_person) p
WHERE EXISTS(SELECT 1
FROM person p1
WHERE p1.father=p.id_person
OR p1.mother=p.id_person
AND p.num_of_pets > 2)
我知道这是一个非常奇怪的例子,但只是想表明我的意思。
当我运行这样的查询时,我在子查询中的p表发生位置得到table or view does not exist
。
我想我误解了如何处理内联视图。
与使用'创建的视图相比,使用是否有任何限制?或者'创建视图'还是现有的桌子?
答案 0 :(得分:1)
我怀疑你打算这样做:
SELECT p.name, p.surname, p.num_of_pets
FROM (SELECT p.id_person, p.name, p.surname,
COUNT(pp.id_person) as num_of_pets
FROM person p LEFT JOIN
person_pets pp
ON p.id_person = pp.id_person
GROUP BY p.id_person, p.name
) p
WHERE EXISTS (SELECT 1
FROM person p1
WHERE (p1.father = p.id_person OR p1.mother = p.id_person) AND
p.num_of_pets > 2
);
我不确定你为什么会遇到这个特殊错误,但有些注意事项:
GROUP BY
在语法上正确。没有COUNT()
的{{1}}会导致错误。GROUP BY
。它有额外的开销,所以最好绕过它。