SQL добавляет строки в каждую строку

у меня есть такая таблица

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
..

Я попробовал несколько решений, может ли кто-нибудь предложить помощь? заранее спасибо

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
69
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Похоже, вы хотите расширить строки в таблицах для каждой комбинации идентификатора/последовательности, где фаза равна 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
идентификатор последовательность фаза характеристики 1 1 300 1 1 1 300 3 1 1 300 4 1 1 300 5 2 1 300 5 2 1 300 4 2 1 300 3 2 1 300 1 2 2 300 1 2 2 300 3 2 2 300 4 2 2 300 5

рабочий пример

Ответ принят как подходящий

Если я вас правильно понял, вам нужны все записи из первой таблицы и, кроме того, все соответствующие записи из второй таблицы. Это означало бы 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, если не хотите повторяться.

Нравится простота

Peter Smith 08.05.2024 12:30

Другие вопросы по теме