【发布时间】:2018-04-24 04:00:26
【问题描述】:
在这个查询中,我需要显示左表中的所有记录,并且只显示右表中结果为最高日期的记录。
当前查询:
SELECT a.*, c.*
FROM users a
INNER JOIN payments c
ON a.id = c.user_ID
INNER JOIN
(
SELECT user_ID, MAX(date) maxDate
FROM payments
GROUP BY user_ID
) b ON c.user_ID = b.user_ID AND
c.date = b.maxDate
WHERE a.package = 1
这将返回连接有效的所有记录,但我需要显示所有用户,如果他们尚未付款,付款表中的字段应为空。
我可以使用联合来显示其他行:
SELECT a.*, c.*
FROM users a
INNER JOIN payments c
ON a.id = c.user_ID
INNER JOIN
(
SELECT user_ID, MAX(date) maxDate
FROM payments
GROUP BY user_ID
) b ON c.user_ID = b.user_ID AND
c.date = b.maxDate
WHERE a.package = 1
union
SELECT a.*, c.*
FROM users a
--here I would need to join with payments table to get the columns from the payments table,
but where the user doesn't have a payment yet
WHERE a.package = 1
使用联合的选项似乎不是一个好的解决方案,但这是我尝试过的。
【问题讨论】:
标签: sql oracle join inner-join