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

Php 如何在查询中添加不同的联接,php,mysql,join,Php,Mysql,Join,我有一个作业表: ID Name TaskID A1 John A A2 Roy B A3 Clair A1 这是TaskID_1表(应选择所有列): 这是TaskID_2表(应选择所有列): 所以,我想加入不同的表格 如果查询是(SELECT*FROM assignment where id='A3'),那么任务id将是A1,因此我想加入任务ID2表 但是如果查询是(SELECT*FROM assignment wh

我有一个作业表:

ID     Name     TaskID
A1     John       A
A2     Roy        B
A3     Clair      A1
这是TaskID_1表(应选择所有列):

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

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

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

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

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

注意:

  • 我正在使用代码点火器,因此脚本处于活动记录中
  • 我没有更改表结构的特权

sql中通常不存在条件联接。你要么加入一张桌子,要么不加入,但你必须下定决心

要获得预期的结果,可以执行两个到赋值表的外部联接,或两个查询的并集,将赋值表内部联接到两个taskid表中的一个。我将向您展示外部连接版本。在选择列表中,使用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

我只是好奇,但是有两个定义相同的TaskID表有什么意义呢?嗯,还有更多的不同之处,我并没有添加所有的列。时间太长了,在你的案子中使用工会对不起,再见editwoah,非常感谢。经过一些小小的调整,我得到了预期的结果。
TaskID     Deadline  place_of_arrival     staffID    day_of_shipment
A1          100
A2          200
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'
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