2016-07-28 56 views
-2

我需要創建一個查詢,該查詢將顯示具有最低但最接近的id的項目名稱,該項目也被視爲「關鍵」項目,具體取決於任務代碼是空的。這似乎是一個有點令人費解,所以我把它放在一個簡單的代碼來簡化:如何使用ifnull創建臨時表

ifnull (Task_Code, 

create Key_temp 

select id_temp 
    task_is_key_temp 
    task_id_temp 
    proj_name_temp 

from projetos_main pm left join pcrs 
ON pcrs.num_doc = pm.Task_code 

where task_id_temp <= task_id and 
task_is_sum_temp = 'true' 

order by id desc 
limit 1 

所以,當任務代碼爲空,我想創建一個臨時表,從信息填充它我主表,並得到一個既是「重點項目」,又有低於原始標識的結果。

的問題是,我不知道是否有可能創建一個使用「IFNULL」臨時表,當我做到以下幾點:

ifnull(Task_code, 
     CREATE TABLE Key_temp ...) 

我得到一個語法錯誤。所以這是不可能的或者是我的代碼錯了?

編輯

這裏的表結構:

Pcrs 
Num_doc| 
1  | 
2  | 
-  | 



Projetos_main 
Id || Task_is_key || Task_id || Proj_name || Task_code | 
1 || False || 3 || Name 1 ||  1  | 
2 || True  || 5 || Name 2 ||  2  | 
3 || False || 5 || Name 3 ||  -  | 

Task_code是一個外鍵引用Num_doc。不是所有的項目都有一個Task_Code,所以當發生這種情況時,我需要顯示項目名稱與最近的ID,這也是一個關鍵項目。

因此,它應該停止在項目3,意識到Task_code是空的,並獲得項目2,它具有相同的task_id AND是一個key_task。

+0

將您所需要的臨時表? –

+0

這個邏輯有點複雜,但如果絕對必要的話,我可以把它包含在問題中。我是不是該? – RazorFinger

+0

我基本上需要在同一張表上包含來自不同行和列的信息 – RazorFinger

回答

1

現在,我可以看到你的結構,我想試試這個:

SELECT pm.* 
    , IFNULL(
     pm.Task_code, 
     SELECT Task_id -- or perhaps just id? 
     FROM Projetos_main pm2 
     WHERE pm2.id < pm.id 
     ORDER BY pm2.id DESC LIMIT 1 
     ) 
FROM Projetos_main pm 
+0

這正是我需要的,非常感謝您的耐心。 – RazorFinger

+1

不客氣:)請注意,如果由於子查詢而存在許多行,則此操作可能會緩慢運行。 –

1

IFNULL根據列的空值的可變性返回兩個參數之一。

Create table Temp select ... 

上面的代碼不是有效的返回值。此查詢不起作用。