我正在尝试在“ FROM”部分中使用子查询,但稍后收到错误消息“关系“表名”不存在”。
我试图复制粘贴我的子查询,该子查询虽然有效,但是却创建了非常冗长且丑陋的代码,因为我发送的内容只是表示相同问题的全部内容的一部分。
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行:WHERE(Reporter.rid NOT IN(SELECT * FROM nonH)AND Reporter ....
答案 0 :(得分:0)
没有称为“ nonH”的表。您正在SELECT子句中为子查询创建“ nonH”别名,但不会创建具有该名称的持久对象。
答案 1 :(得分:0)
您不能在这样的子查询中使用派生表。您要么必须重新为其查询:
patron=re.compile(r'\n\{*\\small\{(?P<texto>.*?)\}+', re.S)
或者您可以使用公用表表达式:
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);
/ INNER JOIN
/ ...语法重写它。并问自己,交叉连接实际上有什么用处,以及是否确实需要它们。