【问题标题】:join query does not return null values连接查询不返回空值
【发布时间】:2022-01-09 20:36:20
【问题描述】:

我有这张带有单位/房屋的桌子

CREATE TABLE `units` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `cancellation_policy` varchar(255) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  `image_url` varchar(255) NOT NULL,
  `price` decimal(19,2) NOT NULL,
  `region` varchar(255) NOT NULL,
  `title` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UKha7gwhuig6p6vftvoghfi2b7g` (`title`,`image_url`),
  UNIQUE KEY `UK_pdd7pto9vch2kb58kohy96a5f` (`image_url`),
  UNIQUE KEY `UK_58rre8c1gk28a7d5p6wguiti9` (`title`)
)

这个有评论

CREATE TABLE `reviews` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `description` varchar(255) DEFAULT NULL,
  `stars` int NOT NULL,
  `user_id` varchar(255) NOT NULL,
  `unit_id` bigint NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UKc3rd8vjkpbcda34jomifuybu9` (`user_id`,`unit_id`),
  KEY `FKbgbdator49pjrbriaktrbv1q2` (`unit_id`),
  CONSTRAINT `FKbgbdator49pjrbriaktrbv1q2` FOREIGN KEY (`unit_id`) REFERENCES `units` (`id`)
)

我想将所有电影的平均评分汇总在一起。但是,此查询不会返回没有评级 (NULL) 值的电影。此查询不会返回没有评分的电影

select 
u.id, u.cancellation_policy, u.description, u.image_url, u.price, u.region, u.title, round(avg(stars),0) as ratings 
from units u
inner join
reviews r
ON u.id = r.unit_id 
group by u.id

获取所有电影(包括那些没有明星的电影)的正确方法是什么?

【问题讨论】:

标签: mysql sql database


【解决方案1】:

LEFT JOIN 会显示所有单元,即使是没有评论的单元

SELECT 
    u.id,
    u.cancellation_policy,
    u.description,
    u.image_url,
    u.price,
    u.region,
    u.title,
    ROUND(AVG(IFNULL(stars,0)), 0) AS ratings
FROM
    units u
        LEFT JOIN
    reviews r ON u.id = r.unit_id
GROUP BY u.id

【讨论】:

    【解决方案2】:

    尝试使用LEFT JOIN 而不是INNER JOIN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多