mysql - 来自 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;
非常感谢!
解决方案
如果你想带着喜欢去希腊旅行,你可以使用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
);
推荐阅读
- c# - 通过 .Net 和 SqlBulkCopy 从 Oracle 到 SQL Server 以极高的精度传输浮点数
- javascript - 功能组件和组件类的区别?
- ubuntu - Hadoop 在启动时使用了错误的用户名?
- python - 在多个按钮上显示图像 - kivy
- java - 仅在调用另一个方法时如何锁定方法
- woocommerce - 如何删除供应商:从 Dokan 客户订单电子邮件
- spring-boot - 使用 JpaRepository 将数据保存在存在多对一的表的行中的问题
- xml - 我无法使用 python 从 Betfair 网站解析 XML
- java - 在android中以编程方式绘制圆形
- npm - 当一个使用纱线和另一个 npm 时,如何在两个存储库之间链接?