我有一个很大的声明:
SELECT
a.user_id, a.user_name,
s.name, s.value,
d.default
FROM
accounts a,
settings s
LEFT OUTER JOIN default d ON ( d.name = s.name )
WHERE
s.user_id = a.user_id;
问题是settings
包含大量条目,我需要选择ID最高的条目。我可以想象更改语句并用子选择替换连接(从settings
获取正确的条目),但我很想知道是否有更好的解决方案。任何输入都表示赞赏。非常感谢!
答案 0 :(得分:0)
您可以使用子查询从右表中获取您想要的结果。
类似的东西:
SELECT
*
FROM
accounts a,
(
SELECT
user_id,
*
FROM
settings
WHERE
RANK() OVER (ORDER BY id DESC, PARTITION BY user_id) = 1
) s
答案 1 :(得分:-1)
从表中获取最高ID可以使用
完成select max(id) ...
或
select id from settings where rownum=1 order by id desc
(我更喜欢第一种解决方案) 或者就像John提出的那样,但无论如何你都需要一个子查询。 还有一件事,你的例子中可能会有一些拼写错误,我看不出d来自哪里,也没有说自动离开加入......
以下是我要写的内容
SELECT
user_id, user_name,
name, value,
default
FROM
accounts join
(select user_id,name
from settings
where RANK() OVER (ORDER BY id DESC, PARTITION BY user_id) = 1) using(user_id)
LEFT OUTER JOIN default using ( name )
......仍然是子查询