Вы не можете иметь неограниченное количество столбцов в таблице - вы ограничены определенным количеством.В этом случае вы просто используете:
... where a = 1 and c = 5 and q = 0 and b = 0 and d = 0 and ...
Если вы просто подразумевали, что количество определено, но число столбцов , используемых вашим приложением, может измениться, то запрос должен будетгенерироваться также во время выполнения, используя ту же информацию.Например, если d
не использовался во время выполнения, он был бы исключен из запроса.
Но это очень плохо спроектированная таблица, и вам следует подумать о ее нормализации лучше, например, перенести эти атрибуты вотдельную таблицу (по одному атрибуту на строку в этой новой таблице) и связывание их с исходной таблицей с полем id
, например:
BaseTable:
id integer primary key
datetime timestamp
OtherTable:
id integer references BaseTable(id)
attribute char(1)
text varchar(50)
primary key (id,attribute)
Схема такого типа допускает произвольные атрибуты для каждого id
.
Исходя из ваших комментариев о том, что вы изменяете таблицу, основываясь на каком-то внешнем факторе, я думаю, это то, что мы в мире DBA назвали бы "интересным" дизайнерским решением: -)
Я бы настоятельно советовался против этого, но, если вы сочтете нужным игнорировать этот совет, вы можете получить метаданные в большинстве реализаций DBA.
Например, MySQL имеет COLUMNS
table в схеме INFORMATION_SCHEMA
, которую вы можете использовать для перечисления всех столбцов для данной таблицы.Используя это, вы можете динамически построить действительный оператор SQL на основе произвольно сложной таблицы.
Не говоря уже о том, что это хорошая идея, просто это возможно.