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 查询

使用 Python 提取嵌套列

我如何将平面数据框转换为 spark(scala 或 java)中的嵌套 json

列表中的嵌套字典到数据框python

casewhen嵌套casewhen出现空值为啥会出现空值

SQL数据查询之——嵌套查询