我有一个名为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"
我希望这很好。
答案 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,则此查询应返回组名,否则返回空字符串。