Python SQL 中的嵌套查询导致空数据框
Posted
技术标签:
【中文标题】Python SQL 中的嵌套查询导致空数据框【英文标题】:Nested queries in Python SQL results in empty dataframe 【发布时间】:2020-02-09 20:03:58 【问题描述】:我正在尝试做一个关于 SQL 的作业问题。我的问题是:
列出所有在 1970 年之前和 1990 年之后出演电影的演员。
这是数据库架构。
我的查询状态如下:
df1= pd.read_sql_query("SELECT DISTINCT(NAME) FROM PERSON WHERE PID IN(SELECT PID FROM M_CAST WHERE MID IN (SELECT MID FROM MOVIE WHERE YEAR>1970 OR YEAR<1990));",conn)
结果是一个空数据集。
我什至尝试过加入但没有运气。我使用 join 的查询如下所示。
Select p.name from Person P join M_Cast MC on MC.PID=P.PID where MC.MID IN(Select MID from movie where year<1970 or year>1990)
这两个查询都在运行,没有任何错误,但没有给出结果。我以为我对 SQL 很清楚,但不确定我在哪里错了。有人可以帮忙吗?我想知道我到底做错了什么
提前致谢
【问题讨论】:
您是否需要在 1970 年之前出演过电影并且还出演过 1990 年之后的电影的演员?您的代码似乎没有反映这一点,但问题描述却反映了这一点。 好点,我很着急,发帖前没有仔细检查。我已经删除了答案。 @HoneyboyWilson 是的。这正是我正在寻找的 【参考方案1】:select
Name
from
Person
where PID in (
--this select finds persons fitting the criteria
select
MC.PID
from
Movie M join
M_Cast MC on M.MID = MC.MID
where
[year] > 1990 --year is a reserved word in most SQL languages and must be in []
intersect --intersect finds all that match both criteria
select
pid
from
Movie M join
M_Cast MC on M.MID = MC.MID
where
[year] < 1970) --year is a reserved word in most SQL languages and must be in []
【讨论】:
以上是关于Python SQL 中的嵌套查询导致空数据框的主要内容,如果未能解决你的问题,请参考以下文章
EF Core 嵌套 Linq 选择导致 N + 1 个 SQL 查询