2013-08-19 33 views
1

我有表:SQL JOIN變量

任務

  • ID
  • 描述
  • PARENT_ID
  • PARENT_TYPE

賬戶

  • ID

導致

  • ID

我查詢的作品看起來

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值。

任何提示如何實現這一目標?

回答

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注入機會,而沒有適當的控制傳入變量。