经过阅读,我意识到SQL(MySQL在我的案例)不支持列排除。在SELECT语句中排除不明确的列(实际上是CREATE VIEW语句)
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
往往是在它自己的命名约定的一个糟糕的选择,我使用前缀。)
Inexplicable * -1 *是无益的。如果我的问题不清楚,或者表明选择不当,我想知道为什么。 – Dan 2011-06-11 17:26:01