2017-07-25 54 views
1

我是初學者在SQL世界,並希望我maged把正確的問題陳述。 好吧,我的問題是如何創建一個互斥的mysql查詢結果是基於條件。 例如:表 EMP要麼或選擇在一個單一的SQL查詢

---------- 
id name 
--------- 
1 tom 
2 dik 
3 harry 
4 mike 
5 john 

如果問「john」的選擇應該給約翰的唯一記錄,如果沒有找到約翰然後給所有剩餘的記錄。

我在努力想象如何排他性工作。 我的嘗試是:


select case 
when if exists select 1 from emp where emp_name = 'john' 
then select emp_name from emp where emp_name = 'john' 
else select emp_name from emp 
end; 

SELECT COALESCE(select emp_name from emp where emp_name = 'john',select emp_name from emp) 

select distinct(e.emp_name) from emp e left outer join emp f where e.emp_name = 'john' OR e.emp_name = f.emp_name; 

ofcourse他們都不工作.. 我的問題 :如何處理這一問題? :我們可以建立如果然後在sqls?將逐行或過濾結果工作? :如果這已經在任何地方得到解答,會很高興有鏈接。

+0

什麼是 「剩下的所有記錄」 是什麼意思?獲取所有記錄? – ysth

+0

@jalal嘗試創建存儲過程,並且您將在此存儲過程中編寫2個簡單的select查詢。首先,檢查John存在多少條記錄,然後檢查條件是否存在記錄,然後返回記錄,否則返回另一個選擇查詢以返回所有記錄。 – KlwntSingh

+0

@ysth,它表示不是'約翰'的記錄... –

回答

0

事情是這樣的:

select emp_name 
from emp 
where emp_name = 'john' 
union all 
select emp_name 
from emp 
where not exists (select 1 from emp where emp_name = 'john'); 
+0

我不認爲你需要'emp_name <>'john'and';如果不存在是真的,那永遠是真的 – ysth

+0

@ysth。 。 。你是對的。這是多餘的。 –

+0

謝謝戈登,你救了我的命!優秀的解決方案...想知道,這是一個處理互斥查詢的正確方法.. ?? (查詢哪裏需要「或者」) –

0
select e.emp_name 
from emp e 
left join emp emp_john on emp_john.emp_name='john' 
where emp_john.emp_name is null or e.emp_name='john'