sql - 为什么使用 '*' 构建 View 不好?

标签 sql view

为什么使用“*”来构建 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/

相关文章:

带有 JOIN 的 SQL/Excel 查询参数

sql - 在 Oracle 中根据 RowCount 对结果进行分组

sql - 连接两个表并在一行中合并多个关联

MySQL - 从 View 中选择或直接选择

android - 将 Android View 从服务器发送到客户端

mysql - 删除重复的子字符串

sql - 被 MySQL 查询 : How to select rows with a subset of values for a column? 困扰

ios - 使用 Storyboard从 xib 或其他场景添加 subview

python - 如何重定向到另一个应用程序中的 View 并仍然传递参数(Django)

SQL Join 从左表和右表返回空行