为什么使用“*”来构建 View 不好?
假设您有一个复杂的联接并且所有字段都可能在某处使用。
然后你只需要选择需要的字段。
SELECT field1, field2 FROM aview WHERE ...
View “aview”可以是
SELECT table1.*, table2.* ... FROM table1 INNER JOIN table2 ...
如果 table1 和 table2 中的 2 个字段具有相同的名称,我们就会遇到问题。
这仅仅是为什么在 View 中使用 '*' 不好的原因吗?
使用“*”,您可以在不同的上下文中使用 View ,因为信息就在那里。
我错过了什么?
问候
最佳答案
我不认为软件中有很多“很糟糕”的东西,但是有很多东西以不好的方式被滥用了 :-)
你给出的例子是 * 可能没有给你期望的原因,我认为还有其他原因。例如,如果基础表发生变化,可能会添加或删除列,使用 * 的 View 将继续有效,但可能会破坏使用它的任何应用程序。如果您的 View 明确命名了列,那么在更改架构时,有人会更有可能发现问题。
另一方面,您可能实际上希望您的 View 愉快地
接受对基础表的所有更改,在这种情况下 * 将
成为你想要的。
更新:我不知道 OP 是否考虑了特定的数据库供应商,但现在很明显,我的最后一句话并不适用于所有类型。我很感谢 user12861 和 Jonny Leeds 指出这一点,很抱歉我花了 6 年多的时间来编辑我的答案。
关于sql - 为什么使用 '*' 构建 View 不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/262450/