如何使用ifnull创建临时表

时间:2016-07-28 17:41:28

标签: mysql ifnull

我需要根据任务代码是否为空来创建一个查询,该查询将显示具有最低但最接近的id的项目名称,该项目也被视为“关键”项目。这可能看起来有点复杂,所以我将它放在简化的代码中以简化:

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

因此,当任务代码为null时,我想创建一个临时表,用我主表中的信息填充它,得到一个既是“Key项目”又有一个低于原始ID的结果。

问题是,我不知道是否可以使用“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也是Key项目。

所以它应该在项目3停止,意识到Task_code为空,并获得Project 2,它具有相同的task_id AND是key_task。

2 个答案:

答案 0 :(得分:1)

IFNULL返回两个参数中的一个,具体取决于列的空值的可变性。

Create table Temp select  ...

以上不是有效的返回值。此查询无效。

答案 1 :(得分: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