如何使用 ifnull 创建临时 table
How to create a temporary table using ifnull
我需要创建一个查询,根据任务代码是否为空,显示具有最低但最接近 ID 的项目名称,该项目也被视为 "key" 项目。这可能看起来有点复杂,所以我将它放在一个简化的代码中以简化:
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
所以,当任务代码为空时,我想创建一个临时的 table,用我的主要 table 中的信息填充它,并得到一个结果,它既是 "Key project" 并且有一个比原始 ID 低的 ID。
问题是,我不知道是否可以使用 "Ifnull" 创建临时 table,就像我执行以下操作时一样:
ifnull(Task_code,
CREATE TABLE Key_temp ...)
我收到语法错误。所以这是不可能的,还是我的代码错了?
编辑
这是 table 结构:
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 并且是 key_task.
IFNULL returns 取决于列的空值可变性的两个参数之一。
Create table Temp select ...
以上不是有效的 return 值。此查询将不起作用。
既然我可以看到你的结构,我会试试这个:
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
我需要创建一个查询,根据任务代码是否为空,显示具有最低但最接近 ID 的项目名称,该项目也被视为 "key" 项目。这可能看起来有点复杂,所以我将它放在一个简化的代码中以简化:
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
所以,当任务代码为空时,我想创建一个临时的 table,用我的主要 table 中的信息填充它,并得到一个结果,它既是 "Key project" 并且有一个比原始 ID 低的 ID。
问题是,我不知道是否可以使用 "Ifnull" 创建临时 table,就像我执行以下操作时一样:
ifnull(Task_code,
CREATE TABLE Key_temp ...)
我收到语法错误。所以这是不可能的,还是我的代码错了?
编辑
这是 table 结构:
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 并且是 key_task.
IFNULL returns 取决于列的空值可变性的两个参数之一。
Create table Temp select ...
以上不是有效的 return 值。此查询将不起作用。
既然我可以看到你的结构,我会试试这个:
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