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 が 2 つのテーブルのいずれにもないことがわかっている場合は、合体が機能します。Coalease は、一連の最初の非 null 値を取ります。
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);
なります。
ただし、渡された変数に対して適切な制御が行われていない場合、SQL インジェクションの可能性があるため、このアプローチについては注意が必要です。