PostgreSQL : How to join with multiple cross-reference table?

标签 postgresql join

我看过很多关于 multiple JOIN 的帖子,但对我的情况没有帮助。

假设我有三个表和两个交叉引用表。这与其他帖子的不同之处在于,他们有多个表格,但 FROM 中有一个交叉引用表格。

表 1 -> 交叉引用 1 <- 表 2 -> 交叉引用 2 <- 表 3

我的 Postgresql 版本是:9.0.11,我正在使用 W7 64 位。

我的要求是以下内容:

Select [columns] from cross-ref1, cross-ref2

INNER JOIN table1 ON table1.id_table1=cross-ref1.ref_id_table1

INNER JOIN table2 ON table2.id=cross-ref1.ref_id_table2

INNER JOIN table2 On table2.id_table2=cross-ref2.ref_id_table2

INNER JOIN table3 ON table3.id_table3=cross-ref2.ref_id_table3

错误信息是:“多次指定表名。”

你能解释一下错误吗?

谢谢

最佳答案

交叉引用表需要为引用的每一侧单独的列。只有一列的外部参照表没有意义,因为它只能引用每一侧具有相同 ID 的行。

典型的设置是:

CREATE TABLE a (
    id integer primary key,
    avalue text not null
);

CREATE TABLE b (
    id integer primary key,
    bvalue text not null
);

CREATE TABLE ab (
     a_id integer references a(id),
     b_id integer references b(id),
     PRIMARY KEY(a_id, b_id)
);

给定样本数据:

INSERT INTO a(id, avalue) VALUES 
(1, 'a1'), (2, 'a2'), (3, 'a3'), (4, 'a4');

INSERT INTO b(id, bvalue) VALUES 
(41, 'b1'), (42, 'b2'), (43, 'b3');

INSERT INTO ab(a_id, b_id) VALUES
(1, 41), (1, 42), (2, 43);

你会找到 ab 的配对:

SELECT avalue, bvalue
FROM a
INNER JOIN ab ON (a.id = ab.a_id)
INNER JOIN b ON (b.id = ab.b_id);

这里的关键是您在 a 端加入 ab.a_id ,在 ab.b_id 加入 b 端。在这里观看演示:http://sqlfiddle.com/#!12/3228a/1

这几乎是“多对多表关系 101”,因此可能值得对介绍性 SQL 和关系数据库教程和文档进行更多研究。

关于PostgreSQL : How to join with multiple cross-reference table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17874873/

相关文章:

java - 使用 Postgres 在 Spring Data JPA 中的事务中发出脏读

python - 如何处理密码中的@符号 - sqlalchemy

postgresql - 在 padrino 中配置 heroku 数据库连接 - DATABASE_URL 失败

sql - 什么时候选择CROSS APPLY,什么时候选择EXISTS?

MySQL 选择连接空值

python - 根据第一个表记录合并两个表

python - Pandas 枢轴并加入两个数据框

mysql - 通过 1 个公共(public)单列连接两个 MySQL 表

sql - 如何从选择查询创建表?

php-从表中读取数据到数组中并检查条件