多个左连接在同一个表上但不同的行

时间:2014-10-09 20:35:23

标签: mysql

我想在同一个表上进行多个连接,但使用不同的别名:

Table1
id
 1
 2

Table2
id pid
 1  1
 2  1
 3  2
 4  2

我尝试了什么

SELECT
  t1.id    AS ´t1.id´,
  t2_1.id  AS ´t2_1.id´,
  t2_1.pid AS ´t2_1.pid´,
  t2_2.id, AS ´t2_2.id´,
  t2_2.pid AS ´t2_2.pid´
FROM table1 AS t1
LEFT JOIN table2 AS t2_1 ON t2_1.pid = t1.id
LEFT JOIN table2 AS t2_2 ON t2_2.pid = t1.id

我期待的结果是

t1.id = 1, t2_1.id = 1, t2_1.pid = 1, t2_2.id = 2, t2_2.pid = 1
t1.id = 2, t2_1.id = 3, t2_1.pid = 2, t2_2.id = 4, t2_2.pid = 2

但我在两个连接上得到相同的结果。有没有办法让每个联接使用下一个匹配的行而不是第一个?或者我需要使用多个pid并将它们存储在t1中?

谢谢:)

2 个答案:

答案 0 :(得分:0)

要扩展我的问题:table2应该如何知道它应该作为t2_1并提供3,还是ar t2_2并提供4?

我认为你需要改变:

Table2
id pid
 1  1
 2  1
 3  2
 4  2

Table2
id pid_1 pid_2
 1  1     1
 2  1     2
 3  2     1
 4  2     2

并相应地更改联接。

答案 1 :(得分:0)

我认为你可以这样做:

SELECT
  t1.id    AS ´t1.id´,
  t2_1.id  AS ´t2_1.id´,
  t2_1.pid AS ´t2_1.pid´,
  t2_2.id, AS ´t2_2.id´,
  t2_2.pid AS ´t2_2.pid´
FROM table1 AS t1
LEFT JOIN table2 AS t2_1 ON t2_1.pid = t1.id
LEFT JOIN table2 AS t2_2 ON t2_2.pid = t1.id AND t2_2.id > t2_1.id

您必须为每个新联接使用AND t2_2.id > t2_1.id,然后对之前的联接进行反向引用。