Мне нужно объединить/перебрать некоторые данные, но не уверен, как это сделать, используя только запросы типа Mysql вложенные /WHERE IN. У меня есть одна таблица, которая выглядит так:
id, code1, code2, code3, code4........... code20
1 12 41 1 55
Так много столбцов, они не все имеют значения, но из тех, которые делают, мне нужно взять каждый из этих кодов и вернуть строку для кода из таблицы, которая выглядит так:
codeid, description
1 item1
12 item12
13 item13
41 item41
...
Я надеялся, что могу использовать подстановочный знак в моем выборе для столбцов, таких как
SELECT description FROM table2 WHERE IN(SELECT code* FROM table1)
Это не похоже на подстановочные знаки, которые могут возникнуть из моего googling, но кто-то здесь может знать трюк. Как я могу взять все значения из первой таблицы в виде списка, запустить запрос на нем, чтобы вернуть определения каждого кода в виде отдельных строк?
Нет, вы не можете использовать подстановочный знак. Это проблема с вашей структурой данных. Всякий раз, когда у вас есть столбцы, которые отличаются только цифрами, у вас, вероятно, проблема с моделью данных.
Вместо этого вы должны иметь таблицу с одной строкой для каждого id
и code
.
Вы можете сделать что-то вроде:
select t2.description
from table2 t2
where exists (select 1
from table1 t1
where t2.code in (t1.code1, t1.code2, . . . )
);
Производительность будет не очень хорошей. Для этого см. Первое предложение по исправлению модели данных.
select 1
? Я получаю ошибку при реализации этого таким образом. Честно говоря, я использую соединение ODBC с базой данных C-Tree. Вmost
случаев это совместимо с командами Mysql, но иногда это сбивает меня с толку.