假设我有“苹果”和“橙色”表格,我希望能够内部加入这些表格,我提供“num”并接收任务名称以换取所有4个任务。
然而,似乎内部联接只适用于一个任务,而不是全部四个任务。
SELECT orange.name
FROM apple
INNER JOIN orange ON orange.task_id = apple.Task1
WHERE num = ?
这将提供Task1的名称,因为我说num = 1。
有没有办法接收Task1,Task2,Task3,Task4的名称,因为我说num = 1?或者我需要有4个单独的请求吗?
答案 0 :(得分:2)
您可以尝试以下代码
select orange.name from
(select Task1 as task from apple t1
union
select Task2 as task from apple t1
union
select Task3 as task from apple t1
union
select Task4 as from apple t1
) T inner join orange on orange.task_id=T.task
答案 1 :(得分:1)
SELECT apple.num
, o1.name AS task1
, o2.name AS task2
, o3.name AS task3
, o4.name AS task4
FROM apple
INNER JOIN orange o1 ON o1.task_id = apple.Task1
LEFT OUTER JOIN orange o2 ON o2.task_id = apple.Task2
LEFT OUTER orange o3 ON o3.task_id = apple.Task3
LEFT OUTER orange o4 ON o4.task_id = apple.Task4
WHERE apple.num = ?
上述查询将仅返回至少具有1个任务的行,假设它位于apple.Task1中。如果您始终保证有4项任务,则可以为每个INNER JOIN
使用JOIN
来缩小结果范围。否则,LEFT OUTER JOIN
不会消除具有NULL
任务的行。