0

我正在学习有关数据库的在线课程。但是,我真的不知道下一步是什么以及如何回答这个问题。有人可以帮忙吗?这就是我到目前为止所拥有的。

SELECT P.name
FROM Persons P 
LEFT JOIN Knows K ON K.personA_id = P.id
WHERE K.age >= P.age

在此处输入图像描述

4

3 回答 3

2

尝试这个 :

SQL小提琴

SELECT distinct P1.name
FROM Persons P1 
INNER JOIN Knows K ON K.personA_id = P1.id
INNER JOIN Persons P2 ON K.personB_id = P2.id AND P1.age - P2.age > 5

它将输出每个认识 1 人或更多人 (personA) 并且每个认识的人比 5 岁以上 (personB)

于 2015-03-03T18:50:17.070 回答
1

使用ALL/EXISTS. 以下是实际做到这一点的方法:

/* all */
select p.name
from Persons as p
where p.age - 5 > all (
    select p2.age
    from
        Knows as k inner join
        Persons as p2
            on p2.person_id = k.personB_id
    where p2.id = p.id
)

/* not exists */
select p.name
from Persons as p
where not exists (
    select p2.age
    from
        Knows as k inner join
        Persons as p2
            on p2.person_id = k.personB_id
    where p2.id = p.id
        and p2.age > p.age - 5
)
于 2015-03-03T19:29:17.080 回答
0
SELECT p.name
FROM Persons p
WHERE p.age > 
    ((SELECT p1.age 
     FROM persons p1
     INNER JOIN knows k
     ON p1.id = k.personB_id)
     + 5)

与此类似的东西应该可以工作。我还没有测试过这个,但基本的想法就在那里。您必须通过对表 2 运行子查询来将表 1 的年龄与表 1 中已知的每个人的年龄进行比较。还有其他方法,但这似乎是最简单的。试试看,如果您遇到任何错误,请告诉我。享受 :)

于 2015-03-03T18:31:42.717 回答