内部联接以接收多个值

时间:2017-09-29 17:37:23

标签: php mysql sql

假设我有“苹果”和“橙色”表格,我希望能够内部加入这些表格,我提供“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个单独的请求吗?

Here are the tables

2 个答案:

答案 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任务的行。

相关问题