有架构:
CREATE TABLE foo (
id SERIAL UNIQUE,
name VARCHAR(15) NOT NULL,
domain VARCHAR(255),
);
CREATE TABLE bar (
foo_id INT UNIQUE NOT NULL REFERENCES foo(id),
passphrase VARCHAR
);
我需要使用:
SELECT * FROM foo LEFT JOIN bar ON bar.foo_id = foo.id;
当 LEFT JOINing 时,Postgres 可以使用外键(两个表之间)作为默认的“ON”子句吗?
即我已经付出了所有的努力来用外键逻辑链接几十个表,为什么我需要在每个查询中重复这些? (从外键推断
ON
子句似乎比让查询器声明它们要安全得多。)
postgresql 中没有这样的功能。一般来说,SQL 需要显式指定您希望该查询执行的操作,并且期望这样的隐式连接可能会导致比它们解决的问题更多的问题。
例如,表之间可以有多个外键。然后,当您添加第二个查询时,它必须停止所有以前的查询,或者猜测使用哪一个,这只是两种糟糕的情况!
甚至还不确定您是否总是想要使用外键来连接表。
引用完整性的目的不是自动连接表,而是能够确保当您连接表时,值将有效。