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

时间:2015-06-29 10:10:10

标签: mysql sql

我有一个名为tasks的表,其中包含名为task_type,task_group和keyid的列。然后是另一个名为task_groups的表,其中包含两列:keyid和name。

如果任务的task_type等于2,那么我知道task_group包含表task_groups中包含任务名称的条目的keyid值。如果task_type是任何其他值,则task_group为-1。所以我想要的是编写一个始终返回任务类型的查询和task_group的名称,但仅当task_type为2时,才能为给定任务返回所有这些。

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

SELECT task_type,task_group AS tgid FROM tasks WHERE keyid = 3;
if (task_type == 2)
    SELECT name FROM task_group WHERE keyid = tgid

有没有办法编写一个查询来执行此操作?

编辑:添加一些样本数据

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"

我希望这很好。

1 个答案:

答案 0 :(得分:0)

试试这个:

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,则此查询应返回组名,否则返回空字符串。