Моя проблема аналогична этому вопросу: qaru.site/questions/1349474/...
У меня есть 4 таблицы, которые я связываю с ключами A и B:
A:
A B C
1 a c
B:
A B D
1 a d
1 a e
C:
A B E
1 a h
1 a i
D:
A B F
1 a k
1 a l
Я хочу присоединиться к таблицам вместе, чтобы результат был следующим:
A B C D E F
1 a c d h k
1 a c e i l
Мой фактический результат:
A B C D E F
1 a c d h k
1 a c e h k
1 a c d h l
1 a c e h l
1 a c e i l
1 a c d i l
1 a c d i k
1 a c e i k
Проблема в том, что я получаю все комбинации. Я хочу иметь как можно меньше строк. Я попробовал решение другой темы, используя рябины:
SELECT*
FROM (SELECT @rowsnum := @rowsnum + 1 AS ae1num,
Concat(ae1.a, ae1.b) AS id,
ae1.*
FROM A as ae1,
(SELECT @rowsnum := 0) r
ORDER BY ae1.a,
ae1.b) ae1
LEFT JOIN (SELECT aenum,
Concat(ae111.a, ae111.b) AS id,
aecm.*
FROM (SELECT @rownum := @rownum + 1 AS aenum,
Concat(ae11.a, ae11.b) AS id,
ae11.*
FROM A as ae11,
(SELECT @rownum := 0) a
ORDER BY ae11.a,
ae11.b) ae111
LEFT JOIN B as aecm
ON ae111.a = aecm.a
AND ae111.b = aecm.b
ORDER BY ae111.a,
ae111.b) aec
ON ae1.a = aec.a
AND ae1.b = aec.b
AND aec.aenum = ae1.ae1num
Надеюсь, я достаточно подробно описал свою проблему.
То, что вы говорите, я считаю, что вы хотите, чтобы A присоединился к первой строке B, первой строке C и первой строке D, а A присоединился ко второй строке B, второй строке C и вторая строка D
Реляционные базы данных не имеют подразумеваемой последовательности в строках; если вы хотите иметь последовательность, это должно быть значение столбца. Есть веские причины для этого, но слишком долго объяснять здесь. В результате вам понадобится столбец для последовательности, например:
create table a (a integer, b varchar(1), c varchar(1));
insert into a (a, b, c) values (1, 'a', 'c');
create table b (a integer, b varchar(1), sequence integer, d varchar(1));
insert into b (a, b, sequence, d) values (1, 'a', 1, 'd');
insert into b (a, b, sequence, d) values (1, 'a', 2, 'e');
create table c (a integer, b varchar(1), sequence integer, e varchar(1));
insert into c (a, b, sequence, e) values (1, 'a', 1, 'h');
insert into c (a, b, sequence, e) values (1, 'a', 2, 'i');
create table d (a integer, b varchar(1), sequence integer, f varchar(1));
insert into d (a, b, sequence, f) values (1, 'a', 1, 'k');
insert into d (a, b, sequence, f) values (1, 'a', 2, 'l');
Тогда запрос:
select distinct
a.a,
a.b,
a.c,
b.d,
c.e,
d.f
from
a
join
b on a.a = b.a and a.b = b.b
join
c on a.a = c.a and a.b = c.b and c.sequence = b.sequence
join
d on a.a = d.a and a.b = d.b and d.sequence = b.sequence;
И результат:
+---+---+---+---+---+---+
| a | b | c | d | e | f |
+---+---+---+---+---+---+
| 1 | a | c | d | h | k |
| 1 | a | c | e | i | l |
+---+---+---+---+---+---+
2 rows in set (0.00 sec)