Postgres:我如何加入OR声明?

时间:2013-07-11 20:21:55

标签: postgresql join postgresql-9.2

给出两个表:

CREATE TABLE table1(id INT4, "name" TEXT);
CREATE TABLE table2(table1_id INT4, name1 TEXT, name2 TEXT, name3 TEXT);

INSERT INTO table1 (id, "name") VALUES
(1, 'Jimmy'),
(2, 'John'),
(3, 'Sally'),
(4, 'Harry')
;

INSERT INTO table2 (name1, name2, name3) VALUES
('Jimmy', 'jim mcneil', 'James Mc''Neil'),
('Jonathon', 'Jon J.', 'Jon J. Jr.'),
('Sally S', 'Sally', 'Sally S. Smith'),
('Harry, Jr.', 'Harry H.', 'Harry')
;

如何加入table1.name可能与table2中的任何名称相同?有什么影响:

SELECT * FROM table1 a
FULL JOIN table2 b
 ON a."name" = b.name1 OR a."name" = b.name2 OR a."name" = b.name3
;

FULL JOIN是(我认为)很重要,因为我想知道(并看到)匹配位置和匹配位置。

1 个答案:

答案 0 :(得分:1)

您的语法应该有效,但这个更短:

on a."name" in (b.name1, b.name2, b.name3)

FULL join在联接的两边都不会匹配。我怀疑你想要left join在右侧没有匹配,也就是说,右侧会有空值。