组合 "person" table、"logged on" table 和 "data" table 以获得具有数据的最新登录日期的人
Combine "person" table, "logged on" table and "data" table to get person with latest logged on date that has data
我有三个 table:
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 table 中有数据的人最后一次登录的结果。
我知道我能做到:
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
您可能没有得到回应,因为没有多少人使用过 apache derby,但如果不一定优化,这应该适用于大多数 dbms:
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
如果由于某种原因 derby 不支持分组依据,您可以添加子查询:
AND loggedOn = (
SELECT max(loggedOn) FROM LOGGED_ON_LOG l2
WHERE p.personName = l2.person_name)
我有三个 table:
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 table 中有数据的人最后一次登录的结果。
我知道我能做到:
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
您可能没有得到回应,因为没有多少人使用过 apache derby,但如果不一定优化,这应该适用于大多数 dbms:
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
如果由于某种原因 derby 不支持分组依据,您可以添加子查询:
AND loggedOn = (
SELECT max(loggedOn) FROM LOGGED_ON_LOG l2
WHERE p.personName = l2.person_name)