我有桌子:
任务
账户
引线
我的查询有效吗
SELECT tasks.name,date_due, tasks.description, accounts.name FROM tasks
JOIN accounts
on tasks.parent_id = accounts.id
WHERE DATE(date_due) = DATE(NOW() + INTERVAL 1 DAY) AND tasks.assigned_user_id=1
我需要的是让accounts
变量 - 它可以是帐户或潜在客户,取决于tasks.parent_type
值。
任何提示如何实现这一目标?
答案 0 :(得分:4)
SELECT tasks.name,date_due, tasks.description,
CASE WHEN parent_Type = 1 then
accounts.name
WHEN parent_Type=2 then
leads.name
END as Name
FROM tasks
LEFT JOIN accounts
on tasks.parent_id = accounts.id
LEFT JOIN leads
on leads.id = tasks.parent_ID
WHERE DATE(date_due) = DATE(NOW() + INTERVAL 1 DAY) AND tasks.assigned_user_id=1
或者,如果您知道ID将不在两个表中的一个表中,那么coalease将起作用。 Coalease获取系列中的第一个非空值。
SELECT tasks.name,date_due, tasks.description,
coalesce(accounts.name, leads.name) as Name
FROM tasks
LEFT JOIN accounts
on tasks.parent_id = accounts.id
LEFT JOIN leads
on leads.id = tasks.parent_ID
WHERE DATE(date_due) = DATE(NOW() + INTERVAL 1 DAY) AND tasks.assigned_user_id=1
否则必须编写动态SQL来动态调整表名:其示例如下:
找到了EXECUTE IMMEDIATE concat("select * from ", @table_name, " where a=", @val);
http://dev.mysql.com/worklog/task/?id=2793。
但是我对这种方法提醒你,因为它没有适当的控制来传入变量,因此会受到SQL注入的影响。