Postgresql 关系“表名”不存在,但已从中设置
我试图在FROM部分中使用子查询,但稍后的get errors关系表名称不存在 我试着复制粘贴我的子查询,它可以工作,但会创建非常长且难看的代码,因为我发送的只是整个问题的一部分,它代表了相同的问题Postgresql 关系“表名”不存在,但已从中设置,postgresql,Postgresql,我试图在FROM部分中使用子查询,但稍后的get errors关系表名称不存在 我试着复制粘贴我的子查询,它可以工作,但会创建非常长且难看的代码,因为我发送的只是整个问题的一部分,它代表了相同的问题 SELECT Reporter.rid , Reporter.fname , Reporter.lname FROM Reporter , report , map , keyword , ( SELECT Reporter.rid
SELECT Reporter.rid , Reporter.fname , Reporter.lname
FROM Reporter , report , map , keyword , ( SELECT Reporter.rid
FROM Reporter , report , map ,
keyword
WHERE (Reporter.rid = report.rid
AND report.iid = map.iid
AND map.kword =
keyword.kword AND
keyword.subject <>
'health')
) AS nonH
WHERE (Reporter.rid NOT IN(SELECT * FROM nonH) AND Reporter.rid = report.rid)
我希望这一准则能够奏效,并向我介绍所有与“健康”无关的记者
错误消息为:
错误:关系nonh不存在第7行:其中Reporter.rid不存在
从nonH和Reporter中选择*
没有名为nonH的表。您正在SELECT子句中为子查询创建nonH别名,但这不会创建具有该名称的持久对象。您不能在这样的子查询中使用派生表。您必须为其重新重复查询:
SELECT reporter.rid,
reporter.fname,
reporter.lname
FROM reporter,
report,
map,
keyword,
(SELECT reporter.rid
FROM reporter,
report,
map,
keyword
WHERE reporter.rid = report.rid
AND report.iid = map.iid
AND map.kword = keyword.kword
AND keyword.subject <> 'health') AS nonh
WHERE reporter.rid NOT IN (SELECT reporter.rid
FROM reporter,
report,
map,
keyword
WHERE reporter.rid = report.rid
AND report.iid = map.iid
AND map.kword = keyword.kword
AND keyword.subject <> 'health')
AND reporter.rid = report.rid);
也可以使用通用表表达式:
WITH
nonh
AS
(
SELECT reporter.rid
FROM reporter,
report,
map,
keyword
WHERE reporter.rid = report.rid
AND report.iid = map.iid
AND map.kword = keyword.kword
AND keyword.subject <> 'health'
)
SELECT reporter.rid,
reporter.fname,
reporter.lname
FROM reporter,
report,
map,
keyword,
nonh
WHERE reporter.rid NOT IN (SELECT rid
FROM nonh)
AND reporter.rid = report.rid);
这可能会解决你眼前的问题。但老实说,您查询的表的所有隐式连接都非常混乱,这些表的列从未被使用过,也很难理解,更不用说猜测您可能要查询什么了。我建议您使用显式内部联接/交叉联接/重写它。。。语法。然后问问自己交叉连接到底有什么好处,是否真的需要它们。为什么要使用所有交叉连接?谢谢,我没有使用连接,因为我被要求只使用SQL的基本功能。这意味着没有,也没有加入。我也是一个初学者,这是我第一次用SQL编写,所以可能会比较混乱。