Исходя из ваших комментариев и предоставленных вами данных, я полагаю, что вам нужна FULL OUTER JOIN
второй и третьей таблицы, основанная на числовых значениях и идентификаторах (second_table.second
и third_table.third
), а затем (обычно) INNER JOIN
к первому столу.
К сожалению, в таблицах нет номеров строк, и MYSQL не предоставляет оконных функций. Поэтому это возможно, но с чем-то ужасным:
SELECT
fulljoin.*
FROM new_table t
JOIN
(
SELECT
COALESCE(second,third) AS idnew_table
, idsecond_table AS sid
, second AS secsec
, idthird AS thid
, third AS thirdthird
FROM
(
SELECT
@rn := if(@g = second, @rn+1, 1) AS rownumber
, second
, idsecond_table
, @g := second
FROM
( select @g:=null, @rn:=0 ) AS initvars
CROSS JOIN
second_table
ORDER BY
second
, idsecond_table
) AS grp2
LEFT JOIN
(
SELECT
@rn := if(@g = third, @rn+1, 1) AS rownumber
, third
, idthird
, @g := third
FROM
( select @g:=null, @rn:=0 ) AS initvars
CROSS JOIN
third_table
ORDER BY
third
, idthird
) AS grp3
ON grp2.second = grp3.third
AND grp2.rownumber = grp3.rownumber
UNION ALL
SELECT
COALESCE(second,third) AS idnew_table
, idsecond_table AS sid
, second AS secsec
, idthird AS thid
, third AS thirdthird
FROM
(
SELECT
@rn := if(@g = second, @rn+1, 1) AS rownumber
, second
, idsecond_table
, @g := second
FROM
( select @g:=null, @rn:=0 ) AS initvars
CROSS JOIN
second_table
ORDER BY
second
, idsecond_table
) AS grp2
RIGHT JOIN
(
SELECT
@rn := if(@g = third, @rn+1, 1) AS rownumber
, third
, idthird
, @g := third
FROM
( select @g:=null, @rn:=0 ) AS initvars
CROSS JOIN
third_table
ORDER BY
third
, idthird
) AS grp3
ON grp2.second = grp3.third
AND grp2.rownumber = grp3.rownumber
WHERE grp2.second IS NULL
) AS fulljoin
ON fulljoin.idnew_table = t.idnew_table
;