我开始很简单:
hoops=# select * from core_school limit 3;
id | school_name | nickname
----+------------------+----------
1 | Marshall |
2 | Ohio |
3 | Houston |
(10 rows)
让我们介绍一个故意错误:
hoops=# select name from core_school;
ERROR: column "name" does not exist
LINE 1: select name from core_school;
但为什么这样呢? (意外结果!):
hoops=# select core_school.name from core_school limit 3;
name
-----------------
(1,Marshall,"")
(2,Ohio,"")
(3,Houston,"")
(3 rows)
第三个查询中“name”列的来源是什么?
答案 0 :(得分:8)
这是PostgreSQL
的自动广播功能,允许将function(argument)
称为argument.function
。
你真正打电话的是
SELECT NAME(core_school)
FROM core_school
与此相比:
SELECT (1::int).exp
--
2.71828182845905
这是非常自我解释的。
此“功能”通常会导致混淆,并且(最终)会在9.1
中删除。
答案 1 :(得分:0)
也许你有一个与我不同的Postgres版本。 (我有8.3.7。)但我没有任何这样的“幽灵”名称栏。
如果您只是说“从core_school选择core_school”,您将为表中的每一行获得一行输出,该行包含表中所有列的值数组。这就是你所看到的。
哦,我注意到你得到了经销商的专栏名称。也许你并没有在“core_school”和“name”之间设置一个句点,而是一个空格,现在“name”是列名的别名。 (我的Postgres安装需要单词“as”来为列名创建一个别名,但是有些数据库不需要这个,所以也许Postgres中有一个选项可以兼容。)