sql - 在简单的 SQL 查询中级联选择

标签 sql database postgresql join

假设我们在数据库中有以下关系:

likes(moviefanname, movietitle) 将粉丝与他们喜欢的电影联系起来,其关键是这两个属性的组合。假设 moviefanname 和 movietitle 都是字符串。
shows(cinema, movietitle, Ticketprice) 指示每个电影院放映哪些电影以及费用是多少。它的关键是前两个属性的组合。假设cinema是一个字符串,ticketprice是一个整数。

我想找到至少放映一部 Fred 喜欢的 8 美元以下电影的电影院。

我创建的查询如下:

select cinema 
from (
    select * 
    from (
        select tmp1.movietitle 
        from likes tmp1, shows tmp2 
        where moviefanname = 'Fred' and tmp1.movietitle = tmp2.movietitle) as foo
    where ticketprice < 8) as foo2) as foo3

首先,我加入了两个表的公共(public)属性,将 moviefanname 限制为“Fred”。然后我只保留票价为 8 或更低的元组,最后我做了一个投影,只保留这些电影院的名称。我尝试在 pgadmin SQL 编辑器中执行它,但没有成功,因为它显示第 8 行的 Ticketprice 列不存在的错误。所以,我想问一下逻辑是否正确,我很乐意了解为什么会出现这个错误。

最佳答案

尝试

select distinct cinema 
from likes 
inner join shows on
  likes.movietitle = shows.movietitle  
where (moviefanname = 'Fred') and (ticketprice < 8)

关于sql - 在简单的 SQL 查询中级联选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24412129/

相关文章:

MySQL的执行顺序

php - 通知表设计?

SQL - 选择薪水最高的人的姓名

MySQL COUNT 多重关系

mysql - 远程服务器与mysql连接

postgresql - 从 Postgresql 函数返回自定义类型

php mysql 分组依据

database - Rails 更改默认 URL

python - Postgres mogrify 将二进制添加到 SQL 字符串

postgresql - 如何查看事件查询底层游标