2014-10-09 3 views
0

им хотят сделать несколько объединений на одной и той же таблицы, но с разными псевдонимами:Multiple левая присоединяется на одной таблице, но разные строки

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

изменить третье соединение на 'LEFT JOIN table2 AS t2_2 ON t2_2.pid = t1.i и T2_2.Pid <> T2_1.PID', предполагая только 2 идентификатора для каждого PID, или вы можете просто добавить его к – xQbert

+0

. Как следует table2 знает, должен ли он служить t2_1 и предоставить 3 или ar t2_2 и предоставить 4? – Pieter21

ответ

0

Чтобы расширить немного на мой вопрос: Как table2 должен знать, если он должен служить t2_1 и обеспечить 3 или ар 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 

И изменить стыки соответствующим образом.

+0

Это сработает, но в моем случае я не знаю, сколько строк мне понадобится во второй таблице. В нем определяется, какая первичная таблица используется в этом выборе. Я думаю, что может работать, чтобы использовать значение id второй таблицы. Это значение должно быть выше, чем предыдущее. Я попробую это позже и дам вам знать. – Inceddy

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 для каждого нового присоединиться сделать обратную ссылку на предыдущий.

Смежные вопросы