Создать несколько результатов из одной строки, объединяющей две или три таблицы на основе условных результатов таблицы 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 отсутствует.
1 ответ
Возможно, это будет работать с or
скорее, чем in
:
where exists (select 1
from table1 as t1
where t2.id = t1.codeid1 or
t2.id = t2.codeid2 or
. . .
);