Есть ли способ сделать выбор как таковой
select * from attributes where product_id = 500
вернется
id name description
1 wheel round and black
2 horn makes loud noise
3 window solid object you can see through
и запрос
select * from attributes where product_id = 234
вернет те же результаты, что и любой запрос к этой таблице.
Теперь, очевидно, я мог бы просто удалить предложение where и продолжить свой день. Но это связано с редактированием кода, который я действительно не хочу изменять, поэтому я пытаюсь исправить это на уровне базы данных.
Так есть ли «волшебный» способ игнорировать то, что находится в предложении where, и возвращать все, что я хочу, используя представление или что-то еще?
пожалуйста, критика лучше, чем оскорбление в любой день






Даже если бы это было возможно, я сомневаюсь, что это сработает. Оба предложения WHERE ожидают, что будет возвращена одна вещь, поэтому код, вероятно, будет использовать только первую возвращенную строку, а не все из них.
Это также придаст базе данных поведение, которое заставит будущих разработчиков выдернуть голову, пытаясь понять.
Сделайте это правильно и исправьте код.
или вы можете передать "product_id" вместо целого числа, если для этого нет проверки кода ... так что запрос будет выглядеть следующим образом:
выберите * из атрибутов, где product_id = product_id;
это даст вам каждую строку в таблице.
Вы можете использовать метаданные набора результатов, чтобы получить желаемое, но в наборе результатов не будет описаний полей. Конкретный API для получения метаданных набора результатов из подготовленного запроса зависит от языка программирования, и вы не сказали, какой язык вы используете.
Вы можете запросить INFORMATION_SCHEMA для таблицы продуктов.
SELECT ordinal_position, column_name, column_comment
FROM INFORMATION_SCHEMA.columns
WHERE table_name = 'products' AND schema_name = 'mydatabase';
Вы можете реструктурировать базу данных в стиле Сущность-Атрибут-Значение, но это гораздо более амбициозное изменение, чем исправление кода.
Или вы можете полностью отказаться от баз данных SQL и использовать хранилище семантических данных, такое как RDF, которое позволяет запрашивать метаданные объекта так же, как вы запрашиваете данные.
Насколько мне кажется, эта идея меня всегда интересовала безумными способами. Я думаю, что лучшее решение, которое я мог бы придумать, - это использовать представление, которое использует таблицу продуктов для получения всех продуктов, а затем таблицу атрибутов для получения атрибутов, чтобы каждый возможный продукт учитывался, и все получали тот же результат
Уловка с этим подходом состоит в том, чтобы сопоставить имя столбца в информационной схеме с фактическим столбцом в таблице продуктов. Для этого потребуется гигантское выражение CASE.
Если вы не можете редактировать запрос, может быть, вы можете добавить к нему? Вы могли бы придерживаться
OR 1=1
в конце.
Этот вопрос неверен на многих уровнях, я не знаю, с чего начать ...