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

时间:2014-06-25 14:57:27

标签: sql database postgresql join

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

likes(moviefanname, movietitle)将粉丝与他们喜欢的电影联系在一起,关键是两个人的组合。假设moviefanname和movietitle都是字符串 shows(cinema, movietitle, ticketprice)表示每个电影放映的电影和费用。它的关键是前两个属性的组合。假设cinema是一个字符串,ticketprice是一个整数。

我想找到至少有一部电影的电影院,费用低于8美元,这是Fred喜欢的。

我创建的查询如下:

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

首先,我加入了2个关于他们共同属性的表格,将moviefanname限制为&#34; Fred&#34;。然后我只保留了价格为8或更低的元组,最后我做了一个投影,只保留那些电影院的名字。我试图在pgadmin SQL编辑器中执行它没有运气,因为它显示错误,第8行的列ticketprice不存在。所以,我想问一下逻辑是否正确,我很乐意了解为什么会出现这个错误。

1 个答案:

答案 0 :(得分:2)

尝试

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