sql - 为什么连接会给出重复的行?
问题描述
我很想知道为什么 SQL 连接会给出重复的行。考虑我有一个数据表的例子
|date |source |users
|24th June|organic |100
|24th June|Direct |100
|23rd June|Organic |100
|22nd June|Paid |100
如果我们有另一个类似的表
|date |source |registrations
|24th June|paid |10
|24th June|Direct |30
|23rd June|Organic |50
|22nd June|Paid |45
让我们将上面的表称为 t2,将第一个表称为 t1。当我在日期执行从 t1 到 t2 的左连接时,会生成相同的某些行。我写了一个查询
select t1.dates, t1.source,t1.users,t2.registrations
from t1
left join t2 on t1.dates = t2.dates
根据上面的表格,在 6 月 24 日不应该对不属于第二张表格的源有机进行任何注册,但它显示了我。我可以知道可能是什么原因,因为我们没有相同的主键。另外,任何人都可以通过一些文章来指导我了解这个概念吗?
解决方案
根据上面的表格,6 月 24 日不应该对不属于第二张表格的源有机进行任何注册,但它显示了我。
为什么不?您的查询只是date
join on ,如果您想加入date
并且source
您应该指定它。
连接完全由查询指定,它们不受主键或外键的影响。
推荐阅读
- flutter - 如何避免 Flutter 中的预发布版本?
- java - feign application/x-www-form-urlencoded 类型请求的服务器端缺少请求正文
- visual-studio - Visual Studio 2019 或 Dev.Azure.com - 如何按日期获取我或其他用户已提交的代码列表?
- java - 有没有办法告诉java中哪个子类调用了父函数?
- python - 具有一个固定值和其余随机值的 Pytorch 随机张量生成
- dremio - 索引为 0 的字段超出了 32000 字节的大小限制,dremio
- profiling - 如何按比例获取C++程序在每个函数中花费的时间
- javascript - 流式传输不同语言的 mp4 视频 (ExpressJs)
- node.js - 保护公共 API 的最佳实践是什么
- nativescript - NS MediaFilePicker - 类构造函数 Observable 不能在没有“new”的情况下被调用,并且类型上不存在“on”属性