2017-05-05 171 views
0

一位新手到SQL的位,所以我会很感激任何提示,我要去哪里这个SQL语句错了。SQL查询返回无效结果

我有两个表,一个名为Hotel,另一个名为Review。他们通过HotelID连接。我想这与3(在Hotel表中的属性)大于或等于OverallRating,平均Cleanliness(一Review属性)相关HotelID s的大于或等于恢复到5

我知道事实上有没有HotelID满足这两个要求,但这个声明返回了很多结果。

SELECT 
    Hotel.HotelID 
FROM 
    Hotel 
    INNER JOIN Review ON Hotel.HotelID = Review.ReviewID 
GROUP BY 
    Hotel.HotelID 
HAVING 
    (Hotel.OverallRating >= 3) 
    AND 
    (AVG(NULLIF(Review.Cleanliness, -1)) >= 5); 

NULLIF正被用于排除-1的值(表示没有评级)。

谢谢全部

回答

2

我想这个问题是你INNER JOIN声明。当您将两个表连接在一起时,您想要将它们连接在相关的数据上。您目前正在加入Hotel.HotelID = Review.ReviewID。我的猜测是这些都是各自表格的主键,并且ReviewID并不指向酒店中的记录。

尝试将您的连接更改为ON Hotel.HotelID = Review.HotelID

1

嗯。 。 。在加入酒店之前总结评论。然后,你也应加入正确的密钥:

​​
2

你的内部连接是错误的。

INNER JOIN Review ON Hotel.HotelID = Review.ReviewID 

应该

INNER JOIN Review ON Hotel.HotelID = Review.HotelID 

使用HotelId不ReviewId联接

+0

我是个白痴,好主。我昨天晚上修好了,一定没有保存过。谢谢! – Nothe

-2

我是新来的SQL作为好,但你尝试使用WHERE语句?

SELECT Hotel.HotelID 来自饭店 INNER JOIN评分ON Hotel.HotelID = Review.HotelID WHERE(Hotel.OverallRating> = 3)和(AVG(NULLIF(Review.Cleanliness,-1))> = 5 );

+0

你好!欢迎来到StackOverflow!你的问题非常广泛。请阅读[“我怎么问一个好问题?”](https://stackoverflow.com/help/how-to-ask)。谢谢! –

1

是否存在拼写错误或是存储在Review中的Hotel ID? 评论ID

INNER JOIN Review ON Hotel.HotelID = Review.HotelID