我正在尝试创建一个联系人报告,显示所有联系人并选择在场的联系人。
存在被存储在多对多表中。文档 ID 和出席者。
表格如下:
CREATE TABLE pe
(peid int4, peco int4, pename varchar(30));
INSERT INTO pe
(peid, peco, pename)
VALUES
(1, 1,'Carl'),
(2, 1,'John'),
(3, 1,'Eric'),
(4, 2,'Donald')
;
CREATE TABLE co
(coid int, coname varchar(30));
INSERT INTO co
(coid, coname)
VALUES
(1,'Volvo'),
(2,'BMW'),
(3,'Microsoft'),
(4,'Apple')
;
There is a also a doc table that is not needed for this query
CREATE TABLE pres
(presid int4, presdoc int4, prespe int4);
INSERT INTO pres
(presid, presdoc, prespe)
VALUES
(1,1,1),
(2,2,2),
(3,2,3),
(4,3,1)
;
无效的查询(无论连接类型如何):
SELECT pename,coname,presdoc AS present
FROM pe
LEFT JOIN co ON coid=peco
LEFT JOIN pres ON prespe=peid
WHERE peco = 1 AND presdoc=2
这个查询的输出是
John Volvo present
Eric Volvo present
期望的输出是
Carl Volvo
John Volvo present
Eric Volvo present
SQLFiddle:
http://sqlfiddle.com/#!15/77b09/21
提前感谢您提供任何线索。
最佳答案
你能像这样执行吗(如果你只需要检查是否存在)
SELECT pename,coname,presdoc = 2 AS present
FROM pe
LEFT JOIN co ON coid=peco
LEFT JOIN pres ON prespe=peid
WHERE peco = 1
甚至更好
SELECT DISTINCT pename,coname,presdoc = 2 AS present
FROM pe
LEFT JOIN co ON coid=peco
LEFT JOIN pres ON prespe=peid
WHERE peco = 1
关于sql - 使用多对多关系显示表 1 中的所有记录 - postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35936971/