Postgresql从字典中获取引用

时间:2016-06-12 18:55:09

标签: postgresql

我正在尝试构建一个从表中获取数据的请求,但其中一些列具有外键,我想在一个请求中替换关联的关键字。

基本上就是

表A,第1列:PKA-ID,第2列:名称。 表B,第1列:PKB-ID,第2列:FKA-ID,第3列:金额。

我希望获得表B中的所有行,但是所有外键都被表A中的关联名称替换。

我开始构建一个带有子请求+别名的请求来获取它,但是我的每个子请求有多个结果,但是我找不到将该子请求链接到表B的ID的方法[可能]从主要要求中被用尽,愚蠢或两者兼而有之。我做了类似的事情:

SELECT (SELECT "NAME" FROM A JOIN B ON ID = FKA-ID) AS name, amount FROM TABLEB;

请求感觉很简单......

1 个答案:

答案 0 :(得分:0)

您不需要在子选择中加入。

SELECT pkb_id,
  (SELECT name FROM a WHERE a.pka_id = b.fka_id),
  amount
FROM b;

(见SQL Fiddle)。

子选择查询针对其父选择的每一行运行,并且具有上下文中可用的父行。

您也可以使用简单的连接。

SELECT b.pkb_id, a.name, b.amount
FROM b, a
WHERE a.pka_id = b.fka_id;

请注意,连接版本对PostgreSQL查询优化器的限制较少,因此在某些情况下,连接版本可能会更快地运行。 (例如,在PostgreSQL 9.6中,连接可能使用多个CPU单元,参见Parallel Query)。