我试图使用以下语句创建一个连接表:
CREATE TABLE directors_and_films(
id serial PRIMARY KEY,
directors_id int REFERENCES directors.id
films_id int REFERENCES films.id,
);
这会导致Postgres响应:
ERROR: schema "films" does not exist
当我把它改成
CREATE TABLE directors_films (
id serial PRIMARY KEY,
director_id integer REFERENCES directors (id),
film_id integer REFERENCES films (id)
);
代码执行良好。
我的问题是使用()
与句号访问列之间的区别是什么?这两者在SQL中有什么区别?
Postgres确实支持函数表示法和属性表示法用于列引用。因此,适用于具有列col
的表tbl
:
SELECT col(tbl) FROM tbl;
手动:
但是这种用法是不推荐的,因为它很容易混淆
:
- 将常见查询存储为列?
但这与手头的情况无关。CREATE TABLE
语句中FK约束的简短语法需要在引用列周围加上括号。(显然,在您的示例中,列约束只能引用单个列。)像您尝试的(directors.id
)这样的属性表示法在这里是一个语法错误。
这就是它的全部。手动:
REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]