首页 > 解决方案 > 来自 2 个表的 MySql 内部联接丢失了一些行

问题描述

我对查询和 sql 脚本的整个逻辑有疑问。

我的数据库有 2 个表。第一个“旅行”表有很多独特的旅行,有很多列。第二个表“赞”是每次旅行存在的赞以及旅行所属国家的名称

现在我想select * from trips order by likes where the country = "Greece".

首先,我制作以下代码

SELECT T.*
FROM trips T INNER JOIN
     tripslikes L
     ON T.trip_id = L.trip_id
Where T.country_name = "Greece";

结果是 country = "Greece" 的所有旅行,重复次数与此旅行中的点赞次数一样多。

问题是我失去了我的结果,直到现在还没有任何类似的旅行。这样做的原因是因为ON T.trip_id = L.trip_id<----- 在此,来自 0 个赞的trip_id 在来自赞的trip_id 上不存在,这是正确的。

知道如何在表上没有任何记录的情况下获得旅行喜欢(意思是到目前为止没有任何喜欢记录的旅行)?

更新1

select *, count(*) Total
from 
(
  SELECT T.*
FROM trips T
INNER JOIN tripslikes L
ON T.trip_id = L.trip_id Where T.country_name = "Greece"

) d
group by trip_id;

非常感谢!

标签: mysqlsqlinner-join

解决方案


如果你想带着喜欢去希腊旅行,你可以使用EXISTS

SELECT T.*
FROM trips T
WHERE T.country_name = 'Greece' AND
      EXISTS (SELECT 1
              FROM tripslikes L
              WHERE T.trip_id = L.trip_id
             );

这将删除重复项。如果您想要没有喜欢的旅行,请切换到NOT EXISTS

SELECT T.*
FROM trips T
WHERE T.country_name = 'Greece' AND
      NOT EXISTS (SELECT 1
                  FROM tripslikes L
                  WHERE T.trip_id = L.trip_id
                 );

推荐阅读