我有两张桌子,一张叫做游戏,另一张叫做评论。
我正在尝试将这两个表连接在一起,并在stackoverflow上查看了文档以及其他问题。
SELECT games.id, games.title, games.developer, reviews.review, reviews.review_title,
(SELECT review, COUNT(*)
FROM reviews
GROUP BY review) AS Numberofreviews
FROM games
INNER JOIN reviews
ON games.ean=reviews.games_ean;
我想要的查询是获取一个表格,其中显示了游戏列表以及每个游戏收到的评论数量。
但是当我尝试实现上面的代码时,我得到的错误操作数应该包含一列
我看过其他人遇到这个错误,但情况不同。
任何帮助都会受到赞赏
编辑:这是mySQL
答案 0 :(得分:1)
您需要使用相关子查询,并且对于错误,它清楚地表明子查询中应该有一列
SELECT
g.id,
g.title,
g.developer,
(SELECT
COUNT(*)
FROM
reviews
WHERE games_ean = g.ean) AS Numberofreviews
FROM
games g
INNER JOIN reviews r
ON g.ean = r.games_ean ;
答案 1 :(得分:1)
您得到错误“操作数应包含一列”,因为您的子查询返回两列。在这种情况下只允许一个。但是,您根本不需要子查询。制作left join(如果没有评论)和aggregate评论:
SELECT games.*, COUNT(reviews.games_ean)
FROM games
LEFT JOIN reviews ON reviews.games_ean = games.ean
GROUP BY games.ean;
我认为games.*
功能取决于games.ean
(即games.ean
是唯一的)。
由于此陈述似乎引起混淆,我想强调,仅对分组属性上functionally depended的属性定义分组语句中非聚合属性的投影。因此,声明(假设games.ean
是唯一的)是有效的,并且非常有意义!
MySQL允许预测非聚合属性,而这些属性并非功能依赖!但是它们没有在ANSI-SQL中定义,也不是确定性的,因为MySQL为每个非聚合属性选择一个未定义的值。
答案 2 :(得分:0)
您应该将子查询移到from
子句中,而不是reviews
来获取数字:
SELECT g.id, g.title, g.developer, r.Numberofreviews
FROM games g inner join
(SELECT games_ean, COUNT(*) as Numberofreviews
FROM reviews
GROUP BY games_ean
) r
on g.ean = r.games_ean;
有一个名为review_title
的列没有意义,因为可能会有多个评论。
答案 3 :(得分:-1)
我想要的查询是获取一个表格,其中显示了游戏列表以及每个游戏收到的评论数量。
SELECT games.id, games.title, games.developer, COUNT(DISTINCT reviews.*) as reviews_amount
FROM games
LEFT JOIN reviews ON games.ean = reviews.games_ean
GROUP BY games.ean;