最近,我來到了這裏我有兩個表名爲EMP1和EMP2方案,它具有以下的列和表看起來像下面連接兩個表並返回一列的更大價值
表:EMP1
dno sal
10 1000
20 2000
30 3000
表:EMP 2
dno sal
10 4000
20 5000
30
和輸出表就像
table: output
dno sal
10 4000
20 5000
30 3000
最近,我來到了這裏我有兩個表名爲EMP1和EMP2方案,它具有以下的列和表看起來像下面連接兩個表並返回一列的更大價值
表:EMP1
dno sal
10 1000
20 2000
30 3000
表:EMP 2
dno sal
10 4000
20 5000
30
和輸出表就像
table: output
dno sal
10 4000
20 5000
30 3000
你需要加入兩個表,然後使用greatest()
函數返回的兩個值就越大。
由於工資可以null
則需要使用coalesce()
功能,考慮到這一點:
select t1.dno, greatest(coalesce(t1.sal,0), coalesce(t2.sal,0)) as sal
from emp1 t1
join emp2 t2 on t1.dno = t2.dno;
SQLFiddle例如:http://sqlfiddle.com/#!15/bca1b/1
感謝好友@a_horse_with_no_name完美工作...... – Lohith
我想你想使用table2的結果 - 但是如果table2中有一個空值,你想使用table1?
SELECT table1.dno, NVL(table1.sal, table2.sal)
FROM table1, table2
WHERE table1.dno = table2.dno(+)
請停止使用舊的,古老的和過時的隱式連接'子句 - **尤其是**外連接。即使Oracle建議停止使用專有的「(+)」運算符。 –
感謝朋友的回覆 – Lohith
根據您的意見,我覺得這是你想要什麼:
select e1.dno,
case when nvl(e1.sal,0) > nvl(e2.sal,0) then nvl(e1.sal,0) else nvl(e1.sal,0) end as sal
from emp1 e1
inner join emp2 e2
on e1.dno = e2.dno
這是用於oracle的。對於mysql,mssql,使用isnull()而不是nvl()
Oracle _uses_ SQL。所以「*在SQL和Oracle *中」都沒有意義。 –
謝謝你的回覆...... :) – Lohith
你想用'dno'連接2個表,併爲每個匹配的'max(sal)'得到? –
其實我的一個朋友想出了一個場景......但是,我們必須加入兩張桌子,併爲匹配得到一個最大值(sal)。@ NayruLove – Lohith