如何在查询中添加不同的连接

时间:2016-10-17 03:58:57

标签: php mysql join

我有一个作业表:

ID     Name     TaskID
A1     John       A
A2     Roy        B
A3     Clair      A1

这是TaskID_1表(应该选择所有列):

TaskID     Deadline   supervisor   division   letterID   organizer
A           10
B           20

这是TaskID_2表(应选择所有列):

TaskID     Deadline  place_of_arrival     staffID    day_of_shipment
A1          100
A2          200

所以,我想加入不同的表格。

如果查询是(SELECT * FROM assignment where id ='A3'),那么任务ID将是A1,所以我想加入任务ID2表。

但是如果查询是(SELECT * FROM assignment where id ='A2'),那么任务ID将是B,所以我想加入任务ID1表。

有可能吗? 它是这样的(不是有效的SQL查询):

SELECT * FROM assignment 
IF(assignment.TaskID IN (SELECT TaskID FROM TaskID_1))
{ INNER JOIN TaskID_1 ON assignment.TaskID = TaskID_1.TaskID }
else
{ INNER JOIN TaskID_2 ON assignment.TaskID = TaskID_2.TaskID }
WHERE assignment.ID = 'some_variable'

注意:

  • 我正在使用Code Igniter,因此脚本处于活动记录中
  • 我没有权限更改表格结构。

1 个答案:

答案 0 :(得分:2)

一般情况下,sql中不存在条件连接。要么你加入一张桌子要么你没有,但你必须下定决心。

你可以做些什么来实现预期的结果是分配表的2个外部联接,或者是内部将赋值表连接到2个taskid表之一的2个查询的并集。我将向您展示外部联接版本。在选择列表中,使用coalesce()返回第一个非空值,或者从两个表中列出字段,并在调用应用程序中决定使用哪个字段的数据。

select a.*, coalesce(t1.deadline, t2.deadline) as deadline from assignment a
left join taskid_1 t1 on a.taskid=t1.taskid
left join taskid_2 t2 on a.taskid=t2.taskid