Mysql 根据列值从查询的一部分更改

Mysql 根据列值从查询的一部分更改,mysql,sql,Mysql,Sql,我有一个名为tasks的表,其中有一列名为task\u type、task\u group和keyid。然后是另一个名为task_groups的表,它有两列:keyid和name 如果任务的task_类型等于2,则我知道task_组包含表task_组中包含任务名称的项的keyid值。如果任务类型为任何其他值,则任务组为-1。因此,我想要编写一个查询,它总是返回任务类型和任务组的名称,但只有当任务类型为2时才返回,所有这些都是针对给定任务的 为此,我使用具有以下逻辑的脚本(3是tasks.keyi

我有一个名为tasks的表,其中有一列名为task\u type、task\u group和keyid。然后是另一个名为task_groups的表,它有两列:keyid和name

如果任务的task_类型等于2,则我知道task_组包含表task_组中包含任务名称的项的keyid值。如果任务类型为任何其他值,则任务组为-1。因此,我想要编写一个查询,它总是返回任务类型和任务组的名称,但只有当任务类型为2时才返回,所有这些都是针对给定任务的

为此,我使用具有以下逻辑的脚本(3是tasks.keyid示例):

有没有一种方法可以编写一个查询来实现这一点

编辑:添加一些示例数据

Table task:
+++ keyid +++ task_group +++ task_type
+++ 25    +++ -2         +++ 0
+++ 26    +++ -2         +++ 1
+++ 27    +++ 132        +++ 2
+++++++++++++++++++++++++++++++++++++++

Table task_groups:
+++ keyid +++ name          
+++ 132   +++ a task group
+++++++++++++++++++++++++++++++++++++++
替换上述代码中的值3时的预期输出为

(tasks.keyid = 25) task_type = 0, task_group_name = ""
(tasks.keyid = 26) task_type = 1, task_group_name = ""
(tasks.keyid = 27) task_type = 2, task_group_name = "a task group"
我希望这足够好。

试试这个:

SELECT
    t.task_type, t.task_group AS tgid,
    IF (t.task_type = 2, g.name, '') AS group_name
FROM tasks t
LEFT JOIN task_group g ON t.task_group = g.keyid
WHERE t.keyid = 3
;
如果type=2,此查询应返回组名,否则返回空字符串。

请尝试以下操作:

SELECT
    t.task_type, t.task_group AS tgid,
    IF (t.task_type = 2, g.name, '') AS group_name
FROM tasks t
LEFT JOIN task_group g ON t.task_group = g.keyid
WHERE t.keyid = 3
;

如果type=2,则此查询应返回组名,否则返回空字符串。

请提供一些示例数据和预期结果,或在Ullas上进行修改。我希望这是有用的。请提供一些样本数据和预期的结果,或者在乌拉斯做一把小提琴。我希望这是有用的,因为我有语法错误。这是我编写的复制粘贴查询。我看不出和你的有什么不同:选择t.task\u type,t.task\u group作为tgid,如果(t.task\u type=2,g.name,'')作为组名,从任务t中选择t.keyid=190左加入任务组g在t.task\u group=g.keyidops上。。。我把它放错地方了。。。已经修复了我的语法错误。这是我编写的复制粘贴查询。我看不出和你的有什么不同:选择t.task\u type,t.task\u group作为tgid,如果(t.task\u type=2,g.name,'')作为组名,从任务t中选择t.keyid=190左加入任务组g在t.task\u group=g.keyidops上。。。我把它放错地方了。。。已修复