Создать несколько результатов из одной строки, объединяющей две или три таблицы на основе условных результатов таблицы 1?

Во-первых, позвольте мне сказать, что да, это ужасный способ хранения данных, во-вторых, это не моя вина:) Я пытаюсь интегрироваться со сторонней базой данных для извлечения информации, которая хранится в 3 таблицах, что действительно должно были в двух И сохранены там, где таблица 2 имела отношение многие к одному. Так как это не так, у меня есть загадка, которой я хочу поделиться.

Таблица 1 содержит строки, в которых могут храниться несколько значений. Каждый ряд имеет codeid1-codeid20, Эти столбцы могут содержать значение или 0 (они никогда не null). У них также есть соответствующий codetype1-codetype20 который будет либо 0, либо 1.

Если codetype1 равно 0, мы идем в таблицу 2 и выбираем description из соответствия table1.codeid1=table2.id, Если codetype1 равен 1, теперь мы должны посмотреть на table3 и найти где table1.codeid1=table3.id а затем сопоставить table3.table2id=table2.id и верните описание.

Вот структура данных:

table1
codeid1,codeid2,codeid3,...codeid20 ... codetype1,codetype2,codetype3,.....codetype20
18      13      1          33           0         0         1              1
13      21      45         0            0         1         0              0


table2
id,    description
13    Item 13 Description
15    Item 15 Description
17    Item 17 Description
18    Item 18 Description
21    Item 21 Description
28    Item 28 Description
45    Item 45 Description

table3
id,  table2id
1    15
33   17
21   28

Результаты, которые я бы искал, выглядели бы так:

rowid, description
1      Item 18 Description
1      Item 13 Description
1      Item 15 Description
1      Item 17 Description
2      Item 13 Description
2      Item 28 Description
2      Item 45 Description

Вчера вечером я начал работать с кем-то, но я упустил часть сложности моей ситуации, когда не интегрировал table3. Как я уже сказал, забавная головоломка... Это дает мне связь между двумя первыми столами, но я не уверен, как я могу работать за третьим столом.

SELECT table1.rowid, table2.description
FROM table2
INNER JOIN table1 
ON table2.id=table1.codeie1
OR table2.id=table1.codeie2
...

База данных - это база данных Faircom C-Tree через соединение ODBC, которая обычно совместима с операторами Mysql, включая UNION, WITH, INTERSECT, EXISTS, JOIN... Функция PIVOT отсутствует.

https://docs.faircom.com/doc/sqlref/sqlref.pdf

1 ответ

Возможно, это будет работать с or скорее, чем in:

where exists (select 1
              from table1 as t1
              where t2.id = t1.codeid1 or
                    t2.id = t2.codeid2 or
                    . . .
             );
Другие вопросы по тегам