我有一个作业表:
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'
注意:
答案 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