[英]How to find LEFT OUTER JOIN or RIGHT OUTER JOIN with ORACLE JOIN (+)
[英]Oracle left outer join: howto limit requests in right table
我有一個很大的聲明:
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
獲取正確的條目),但是我很好奇是否有更好的解決方案。 任何輸入表示贊賞。 非常感謝!
您可以使用子查詢從正確的表中僅獲取所需的結果。
就像是:
SELECT
*
FROM
accounts a,
(
SELECT
user_id,
*
FROM
settings
WHERE
RANK() OVER (ORDER BY id DESC, PARTITION BY user_id) = 1
) s
從表中獲取最高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 )
...仍然是子查詢
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.