2017-07-19 37 views
0

我试图加入一个依赖于“task_type”列的值的不同表格MySQL加入不同的表格

语法有什么问题? 谢谢。

SELECT t.*,s.task_name 
    CASE 
    WHEN t.task_type = 0 THEN 
    LEFT JOIN scheduler_tasks s ON s.scheduler_task_id = t.task_id 
    WHEN t.task_type = 1 THEN 
    LEFT JOIN invoice_tasks s ON s.uid = t.task_id 
    END 
    FROM task_timings t 
    WHERE t.account_id = ? AND t.start_date >= DATE(?) AND t.start_date <= DATE(?) 
+0

可以显示错误? – Jenish

+0

'FROM'必须在'LEFT JOIN'之前。 – 2017-07-19 10:18:15

+0

@aendeerei之前,同样的错误你的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,查看'CASE WHEN t.task_type = 0 then THEN LEFT JOIN scheduler_tasks s ON s.scheduler_task'at line 2,driver error code is 1064 – Dunams

回答

0

我相信你想这样的:

SELECT t.*, 
     COALESCE(s.task_name, i.task_name) as task_name 
FROM task_timings t LEFT JOIN 
    scheduler_tasks s 
    ON s.scheduler_task_id = t.task_id AND 
     t.task_type = 0 LEFT JOIN 
    invoice_tasks i 
    ON i.uid = t.task_id AND t.task_type = 1 
WHERE t.account_id = ? AND t.start_date >= DATE(?) AND 
     t.start_date <= DATE(?); 
+0

谢谢!一个小的调整是ON s.uid - 需要是ON i.uid – Dunams

0

你可以尝试这样的:

SELECT t.*,s.task_name FROM task_timings t 
CASE 
WHEN t.task_type = 0 THEN 
LEFT JOIN scheduler_tasks s ON s.scheduler_task_id = t.task_id 
WHEN t.task_type = 1 THEN 
LEFT JOIN invoice_tasks s ON s.uid = t.task_id 
END 
    WHERE t.account_id = ? AND t.start_date >= DATE(?) AND t.start_date <= DATE(?) 
+0

Same - You have an您的SQL语法错误;检查与您的MariaDB服务器版本相对应的手册,以便在第2行“CASE WHEN t.task_type = 0 THEN LEFT JOIN scheduler_tasks s ON s.scheduler_task”时使用正确的语法,驱动程序错误代码为1064 – Dunams