у меня есть такая таблица
id sequence phase characteristics
1 1 300 001
2 1 300 001
2 2 300 002
..
и еще одна таблица, содержащая множество характеристик для каждой фазы
phase characteristics
300 003
300 004
300 005
....
Мне нужно добавить все характеристики к каждому идентификатору/последовательности, где фаза равна 300.
Для лучшего понимания, что мне нужно, это
id sequence phase characteristics
1 1 300 001
1 1 300 003
1 1 300 004
1 1 300 005
2 1 300 001
2 1 300 003
2 1 300 004
2 1 300 005
2 2 300 002
2 2 300 003
2 2 300 004
2 2 300 005
..
Я попробовал несколько решений, может ли кто-нибудь предложить помощь? заранее спасибо


Похоже, вы хотите расширить строки в таблицах для каждой комбинации идентификатора/последовательности, где фаза равна 300.
Здесь SQL-запрос
WITH Allcharachteristics AS (
SELECT '001' AS characteristic
UNION ALL
SELECT '002'
UNION ALL
SELECT '003'
UNION ALL
SELECT '004'
UNION ALL
SELECT '005'
-- Add more characteristics if needed
)
SELECT t.id, t.sequence, t.phase, c.characteristic
FROM YourTable t
CROSS JOIN Allcharachteristics c
WHERE t. phase = 300
ORDER BY t.id, t.sequence, c.characteristic;
Вы можете использовать CROSS JOIN между уникальным UNION между table1 и чататеристами и таблицей, чтобы перевести всех чатактеристов в фазу.
WITH table1 AS (
SELECT
1 as id, 1 as sequence , 300 as phase , '001' characteristics
UNION ALL
SELECT
2 , 1 , 300 , '001'
UNION ALL
SELECT
2 , 2 , 300 , 001),
characteristics as
(SELECT
300 phase, '003' characteristics
UNION ALL
SELECT
300 , '004'
UNION ALL
SELECT
300 , '005'),
GET_PasE_combinations as
(SELECT phase, characteristics FROM table1
UNION
SELECT phase, characteristics FROM characteristics)
SELECT
s.id, s.sequence, s.phase , c.characteristics
FROM table1 s CROSS JOIN GET_PasE_combinations c
WHERE s.phase = c.phase
ORDER BY s.id, s.sequence
Если я вас правильно понял, вам нужны все записи из первой таблицы и, кроме того, все соответствующие записи из второй таблицы. Это означало бы UNION первую таблицу с JOINобработанным результатом таблиц 1 и 2.
SELECT t1.id, t1.sequence, t1.phase, t1.characteristics
FROM t1
UNION ALL
SELECT t1.id, t1.sequence, t1.phase, t2.characteristics
FROM t1
LEFT JOIN t2 ON t1.phase = t2.phase
Удалите ALL из UNION ALL, если не хотите повторяться.
Нравится простота