【问题标题】:MYSQL join bringing back triple resultsMYSQL join 带回三重结果
【发布时间】:2015-06-26 21:03:53
【问题描述】:

无论如何,我对 mysql 并不感到惊讶。直到昨天我还没有处理任何形式的加入,现在我遇到了问题。

我正在执行的SQL语句如下:

SELECT `services`.`name`, `services`.`type`, 
`services`.`review_count_approved`, `reviews`.`escalate`,
`services`.`average_rating` 
FROM `services` 
INNER JOIN `reviews` on `services`.`serviceID` = `reviews`.`serviceID`       
WHERE `services`.`serviceID` IN (50707, 50709);

通过执行此查询,它应该只带回 2 个结果,但实际上它会将 2 个结果带回 3 次。

好的,我从中获取信息的两个表是

-服务

-评论

现在如果我只是执行以下 sql 语句

SELECT * FROM `services` WHERE `serviceID` IN  (50707,50709);

它带回了这些记录

但是当我在这篇文章中进行顶部查询时,它会返回这 2 个结果 3 次。

我做错了什么?

【问题讨论】:

  • 发布你的表格结构
  • 为什么只能得到 2 个结果?每次对这两项服务进行审核时,您都应该得到一个结果。
  • @barmar 非常真实,我没有想到那个,这解释了为什么当它旁边没有评论时什么都没有回来。我怎么能改变它,这样无论它是否有评论,它都能让我回到 1 项服务?
  • 使用LEFT JOIN 而不是INNER JOIN
  • 如果评论有不同的escalateaverage_rating,你真的只想要其中一个吗?哪一个?

标签: mysql sql database


【解决方案1】:

这是因为您在评论表中有多个 serviceID。使用不同的

SELECT DISTINCT `services`.`name`, `services`.`type`, 
`services`.`review_count_approved`, `reviews`.`escalate`,
`services`.`average_rating` 
FROM `services` 
INNER JOIN `reviews` on `services`.`serviceID` = `reviews`.`serviceID`       
WHERE `services`.`serviceID` IN (50707, 50709);

【讨论】:

  • 现在要弄清楚我是如何在 laravel 中做到这一点的 :)
  • 现在当我尝试添加另一个 ID 时,例如 (50707,50709,50713),它只会带回前 2 个结果?
  • @MatthewSmart 50713有评论吗?
  • @barmar 我不是因为你的其他帖子才意识到的。我现在不知道该怎么做,因为即使它没有任何评论,我仍然想抓住该服务
猜你喜欢
  • 2013-11-28
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
相关资源
最近更新 更多