【问题标题】:How to create a temporary table using ifnull如何使用 ifnull 创建临时表
【发布时间】:2016-12-03 06:06:32
【问题描述】:

我需要创建一个查询,该查询将根据任务代码是否为空来显示具有最低但最接近 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

所以,当任务代码为空时,我想创建一个临时表,用我的主表中的信息填充它,并获得一个结果,它既是“关键项目”,而且 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 也是关键项目。

所以它应该停在项目 3,意识到 Task_code 是空的,然后得到具有相同 task_id 并且是 key_task 的项目 2。

【问题讨论】:

  • 你需要临时表做什么?
  • 逻辑有点复杂,但如果绝对有必要,我可以将其包含在问题中。我应该吗?
  • 我基本上需要在同一张表上包含来自不同行和列的信息
  • 就目前而言,您的问题缺乏正确回答的必要细节,您应该包含相关的所有,包括您尝试实施的逻辑
  • 我现在包含了逻辑,希望它有意义

标签: mysql ifnull


【解决方案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

【讨论】:

  • 这正是我所需要的,非常感谢您的耐心等待。
  • 不客气 :) 请注意,如果由于子查询有很多行,这可能会运行缓慢。
【解决方案2】:

IFNULL 根据列的空值的可变性返回两个参数之一。

Create table Temp select  ...

以上不是有效的返回值。此查询不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多