我有三张桌子:
Table 1: PERSON
personName varchar2 unique
personGender varchar2
personAge int
Table 2: LOGGED_ON_LOG
id int unique
personName varchar2
loggedOn timestamp
Table 3: DATA
id int unique
personName varchar2
dataContent varchar2
我一直在尝试编写一个连接语句,以便在上次登录时检索DATA表中包含数据的所有人的结果。
我知道我能做到:
SELECT loggedOn FROM LOGGED_ON_LOG WHERE loggedOn IN (SELECT max(loggedOn) as loggedOn FROM LOGGED_ON_LOG WHERE personName='John Doe');
获取用户上次登录的时间。
我能做到:
SELECT personName, personGender, personAge FROM PERSON WHERE personName IN (SELECT DISTINCT personName FROM DATA);
让所有拥有数据的人。
如何加入这两个选项以便得到以下结果: personName,personGender,personAge,loggedOn
答案 0 :(得分:0)
你可能没有得到回应,因为没有那么多人使用过apache derby但是如果不一定优化的话,这应该适用于大多数dbmses:
SELECT p.personName, p.personGender, p.personAge, Max( loggedOn)
FROM PERSON p, Logged_on_log l
WHERE p.personName = l.personName
AND exists (SELECT 1 FROM DATA d where d.person_name = p.person_name)
GROUP BY p.personName, p.personGender, p.personAge
如果由于某种原因德比不支持分组,你可以添加你的子查询:
AND loggedOn = (
SELECT max(loggedOn) FROM LOGGED_ON_LOG l2
WHERE p.personName = l2.person_name)