PostgreSQL查询不使用连接

时间:2013-02-03 03:04:26

标签: postgresql

是否可以为PostgreSQL数据库编写/制作架构,然后查询让我们说

SELECT email, username, city_population
FROM users, cities
WHERE email = 'user@example.com'

用户表和城市表之间的连接在其他地方定义,PostgreSQL使用该信息连接表。有类似的东西吗?

编辑:无视图

3 个答案:

答案 0 :(得分:4)

NATURAL JOIN,但要实现这一点,列必须具有相同的名称。换句话说,这将起作用:

CREATE TABLE cities (
  city_id SERIAL PRIMARY KEY,
  city_population INTEGER,
  ...
);

CREATE TABLE users (
  username VARCHAR PRIMARY KEY,
  city_id INTEGER REFERENCES cities,
  ...
);

SELECT email, username, city_population
FROM users
NATURAL JOIN cities
WHERE email = 'user@example.com';

Will的查看解决方案更好,可能更接近你想要的,但我认为这更接近你的问题。

答案 1 :(得分:2)

所以你想要联合表的结果,而不是定义如何加入它们?

答案是否定的。显然,你必须加入以某种方式,因为有很多可能的方法,你必须定义如何

NATURAL JOIN可能是你所谈论的下一个最好的事情。请参阅@Daniel's answer

标准SQL中的另一个语法快捷方式是USING clause。有了它,您可以定义要连接表的列的列表。列名必须是双方唯一

SELECT u.email, u.username, c.city_population
FROM   users  u 
JOIN   cities c USING (city_id)
WHERE  u.email = 'user@example.com'

我还将表格资格添加到您可能不明确的查询中。

答案 2 :(得分:2)

不,Daniel描述的NATURAL JOIN和SQL一样接近。有一个原因。虽然人们经常希望基于同一域中的列相等而加入,但他们有时会想要更复杂的东西。我看过很多询问,比如“谁居住在这个城市300英里范围内的一个城市?”,“这个用户最近的三个城市有哪些,不包括他们居住的城市?”或“什么其他用户与该用户处于同一状态?“基于某些假定的连接标准进行自动连接会使编写明确的查询更难以回答这样的问题。

也就是说,想要找到你想要的东西并不罕见,正如Craig所说,有许多工具使用外键定义来提供默认链接。

基于这个问题,我怀疑您可能对HTSQL感兴趣,{{3}}提供自动链接和其他便利功能,以帮助弥合关系数据库与人们可能已经知道的其他格式之间的差距。其发展部分由基金会拨款资助,包括国家科学基金会。 (除了阅读文档,并在会议上与其中一位作者进行了简短的对话之外,我与该项目没有任何关系。)