我想在同一个表上进行多个连接,但使用不同的别名:
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中?
谢谢:)
答案 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
,然后对之前的联接进行反向引用。