После прочтения я понял, что SQL ( MySQL в моем случае ) не поддерживает исключение столбцов.
SELECT *, NOT excluded_column FROM table; /* shame it doesn't work */
В любом случае, хотя я и согласился с этим, мне интересно, есть ли достойные обходные пути для достижения такого поведения. Причина в том, что я создаю представление для объединения информации в нескольких таблицах.
Я нормализовал некоторые пользовательские данные в таблицах user
и user_profile
среди других; целью является то, что user
хранит данные, критичные для пользовательских операций, а user_profile
хранит некритические данные. Требования к приложениям все еще реализуются, поэтому столбцы добавляются / удаляются из user_profile
по мере необходимости, и в дальнейшем могут поддерживаться дополнительные таблицы, которые будут включены в представление.
Проблема в том, что при создании представления я получаю Error 1060: Duplicate Column Name
, потому что user_id
присутствует в обеих таблицах.
Итак, решение, которое я до сих пор предлагал, в основном:
/* exclude user_id from user */
SELECT user.critical_field, user.other_critical_field,
user_profile.*
FROM user
LEFT JOIN user_profile
ON user.user_id = user_profile.user_id;
Поскольку таблица user
будет оставаться неизменной на протяжении всего жизненного цикла приложения (, надеюсь, ), этого может быть достаточно, но мне было просто любопытно, существует ли более динамичный подход.
( Имена таблиц не были copypasta'd, я знаю, user
часто является плохим выбором именования самостоятельно, я использую префиксы. )