INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN这四个怎么在gorm中使用

在 GORM 中,JOIN 操作是通过 Joins 方法实现的,而不同类型的 JOIN(如 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN)可以通过特定的 SQL 语法来表示。GORM 本身并没有直接的 INNER, LEFT, RIGHT 等专用方法,但可以通过使用 Joins 和 SQL 来实现这几种 JOIN 操作。

1. INNER JOIN
INNER JOIN 是默认的 JOIN 类型,因此在 GORM 中,只需要使用 Joins 方法即可。

示例:
假设你有两张表 users 和 orders,我们想要获取所有有订单的用户:

db.Joins("JOIN orders ON orders.user_id = users.id").Find(&users)

解释:这是一个典型的 INNER JOIN,只返回 users 和 orders 中匹配的记录。

2. LEFT JOIN
要执行 LEFT JOIN,可以在 Joins 中明确指定 LEFT JOIN 语句。

示例:
假设你想要查找所有用户,即使他们没有订单(未匹配的订单记录用 NULL 填充):

db.Joins("LEFT JOIN orders ON orders.user_id = users.id").Find(&users)

解释:LEFT JOIN 返回 users 表中的所有记录,即使 orders 表中没有匹配的 user_id。

3. RIGHT JOIN
虽然 RIGHT JOIN 较为少用,但如果需要的话,也可以通过指定 RIGHT JOIN 的 SQL 实现。

示例:
假设你想要查找所有订单,即使某些订单没有对应的用户:

db.Joins("RIGHT JOIN orders ON orders.user_id = users.id").Find(&orders)

解释:RIGHT JOIN 返回 orders 表中的所有记录,即使 users 表中没有匹配的 id,未匹配的用户信息用 NULL 填充。

4. FULL JOIN
GORM 不直接支持 FULL JOIN,因为它依赖于底层数据库的支持。通常可以通过两次 LEFT JOIN 和 RIGHT JOIN 并用 UNION 合并来实现。不过,许多数据库(例如 MySQL)并不支持 FULL JOIN,如果你使用 PostgreSQL 或其他支持 FULL JOIN 的数据库,可以直接使用 SQL:

示例:

db.Raw(`SELECT users.*, orders.*FROM usersFULL JOIN orders ON orders.user_id = users.id
`).Scan(&results)

解释:Raw 允许你直接执行原始 SQL 查询,因此可以通过 FULL JOIN 语法来获取所有用户和订单,包括未匹配的记录。

5. 自定义查询中的 Select
你可以通过 Select 方法结合 JOIN 来选择特定的字段,避免返回不必要的数据。

示例:

db.Table("users").Select("users.name, orders.item").Joins("LEFT JOIN orders ON orders.user_id = users.id").Find(&results)

解释:返回 users 表中的 name 和 orders 表中的 item 字段,即使某些用户没有订单。

总结
在 GORM 中,JOIN 类型主要通过 SQL 语法指定:

  • INNER JOIN:默认使用 Joins(“JOIN …”)。
  • LEFT JOIN:使用 Joins(“LEFT JOIN …”)。
  • RIGHT JOIN:使用 Joins(“RIGHT JOIN …”)。
  • FULL JOIN:通过 Raw 方法执行原生 SQL。
    你可以根据需求选择合适的 JOIN 类型来构建查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/498010.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

闭包的理解

什么是闭包 在函数内层的作用域中访问函数外层的作用域中的变量,就形成了一个闭包,闭包会使其私有变量的生命周期得到提升至与外层作用域一致。 闭包特性: 1.拥有私有变量 2. 延长私有变量的生命周期 一般函数中的变量在函数被执行完成之…

实景三维点云处理专业软件ArcGIS根据DSM生成地表点云集

常见的实景三维处理软件及其特色功能如下: 一、专业实景三维建模软件 Agisoft Metashape 高精度建模:能够生成高精度的三维模型,精度可以达到厘米级甚至毫米级,适用于需要详细测量和分析的项目,如文物保护和建筑测量。…

计算机网络-L2TP Over IPSec基础实验

一、概述 上次我们进行了标准L2TP的配置,但是在最后我们在进行业务流量访问时看到流量是没有进行加密的,这就导致可能得安全风险,所以这里其实可以退像GRE那样调用IPSec框架来进行加密保护。 拓扑 数据不加密 现在需要配置IPSec,然…

怎么在VMware Workstation上安装Win11虚拟机?

Windows11虚拟机是免费的吗? Windows 11 虚拟机本身并不是免费的。你需要一个合法的 Windows 11 许可证才能在虚拟机中运行。不过,许多虚拟机软件(如 VirtualBox 和 VMware Workstation Player)本身是免费的,允许你创…

时间敏感网络中全面分析与调度的模型驱动方法

论文:A Model-Driven Approach for the Comprehensive Analysis and Scheduling in Time-Sensitive Networks》 背景与动机 TSN 的发展与应用领域:自 2012 年起,IEEE 802.1 TSN 任务组致力于开发通信标准,增强 IEEE 802 网络&…

重生之我在异世界学编程之数据结构与算法:深入队列篇

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 目录 一、概述二、链表节点结构三、队列结构四、基…

SpringCloudAlibaba技术栈-Dubbo

1、什么是Dubbo? 简单来说,dubbo就像是个看不见的手,负责专门从注册中心nacos调用注册到nacos上面的服务的,因为在微服务环境下不同的功能模块可能在不同的服务器上。dubbo调用服务就像是在调用本地的服务一样。 分布式调用与高并发处理 Du…

智慧城市超声波气象站

智慧城市超声波气象站是一种现代化的气象监测设备,它利用超声波技术能够实时、精确地监测和记录多种关键气象要素。以下是智慧城市超声波气象站的主要功能: 一、高精度气象监测 风速风向测量:超声波气象站的核心部件是超声波风速风向仪&…

时间关系推理:利用大型语言模型检测股票投资组合崩溃

“Temporal Relational Reasoning of Large Language Models for Detecting Stock Portfolio Crashes” 论文地址:https://arxiv.org/pdf/2410.17266 摘要 当股票投资组合遭遇如2007年金融危机或2020年因COVID-19导致的股市暴跌这样的罕见事件时,传统的…

IndexOf Apache Web For Liunx索引服务器部署及应用

Apache HTTP Server 是一款广泛使用的开源网页服务器软件,它支持多种协议,包括 HTTP、HTTPS、FTP 等 IndexOf 功能通常指的是在一个目录中自动生成一个索引页面的能力,这个页面会列出该目录下所有的文件和子目录。比如网上经常看到的下图展现的效果,那么接下来我们就讲一下…

【C++】BC89 包含数字9的数

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述题目名称:BC89 包含数字9的数 💯代码实现与分析代码结构详解 💯代码执行逻辑示例💯优化与改进改进版代码改进点详解…

解决Windows无法同时使用有线网和无线网WIFI的问题

参考资料 电脑无线网wifi和有线网同时使用(内网外网同时使用)用route命令解决Wifi和网卡不能同时上内外网问题 解决方法 对于Windows系统同时连接有线网和无线网Wifi时,只会有一个网关生效,因此我们需要手动通过route命令设置网…

2025常见的软件测试面试题

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 “ 今天我给大家介绍一些python自动化测试中常见的面试题,涵盖了Python基础、测试框架、测试工具、测试方法等方面的内容,希望能够帮助…

uni.getLocation+百度地图,报错getLocation:fail translate coordinate system faild

问题描述: 经测验,在type传入gcj02时才会报错,要使用gcj02就要配置地图key,没配置,uni.getLocation就会忽略type参数。 当key配置的是百度地图时type传入gcj02会报错。 还有就是不能在谷歌浏览器使用,不然调…

SickOs1.1

下载安装 名称:SickOs:1.1 发布日期:2015 年 12 月 11 日作者: D4rk系列:SickOs sick0s1.1.7z(大小:623 MB)下载(镜像): https: //download.vulnhub.com/sick…

基于卷积神经网络的甲状腺结节识别系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测、图像分类识别、目标追踪等项目可看我主页其他文章 功能演示: 甲状腺结节识别系统,卷积神经网络,resnet50,mobilenet【pytorch框架,python源码】_哔哩哔哩_bilibili (一)简介 …

自动化文档处理:Azure AI Document Intelligence

Azure AI Document Intelligence支持多种文件格式,包括PDF、JPEG、PNG等。其核心功能是将这些文档按页进行内容提取,并转化为LangChain文档。其默认输出格式是Markdown,这使得文档可以通过MarkdownHeaderTextSplitter进行语义分片。您也可以使…

在 Ubuntu 24.04.1 LTS | Python 3.12 环境下部署 Crypto 库

测试一些密码学方案需要用到 Crypto 库,网上教程大多针对 Windows 和 Python 3.10 或以下的环境,所以写下了这篇博文。 部署与使用 首先执行 su 输入密码进入超级用户,部署完 Python 3.12 环境后,执行以下命令进行安装&#xff…

初学stm32 --- FSMC驱动LCD屏

目录 FSMC简介 FSMC框图介绍 FSMC通信引脚介绍 FSMC_NWE 的作用 FSMC_NWE 的时序关系 FSMC_NOE 的含义 FSMC_NOE 的典型用途 FSMC_NOE 的时序关系 使用FSMC驱动LCD FSMC时序介绍 时序特性中的 OE ILI9341重点时序: FSMC地址映射 HADDR与FSMC_A关系 LCD的…