当前位置: 首页 > news >正文

SQL Server 实战 - 多种连接

目录

背景

一、多种连接

1. 复合连接条件

2. 跨数据库连接

3. 隐连接

4. 自连接

5. 多表外连接

6. UNION ALL

二、一个对比例子


背景

本专栏文章以 SAP 实施顾问在实施项目中需要掌握的 sql 语句为偏向进行选题:

  • 用例:SAP B1 的数据库
  • 工具:SQL Server。

本文将详细讲解多种连接的复杂查询,并附带实战例题及代码解法。

前文:《SQL Server 查询设置 - LIKE/DISTINCT/HAVING/排序》

一、多种连接

1. 复合连接条件

查询时,通过 AND/OR 连接条件对查询进行筛选,很常见的基本用法,这里只展示语法:

SELECT [列名]
FROM [表名]
WHERE [条件1] AND/OR [条件2]

2. 跨数据库连接

有时候会需要使用其他账套的信息,在数据库层面看就是需要跨数据库连接表信息,比如同一家公司设立了多个账套,需要在账套间对账时。用 USE 即可调用其他数据库。

跨数据库连接语法(这里的[]在替换内容时需要保留,详见下面例子):

USE [数据库1]
SELECT * FROM [数据库2].[dbo].[表名] --注意:这里的[]在替换内容时需要保留,详见下面例子

例:在使用数据库 DTWDATEBASE1 时,调用数据库 SBODemoCN 的业务伙伴主数据表单。

USE DTWDATEBASE1SELECT CardCode
FROM [SBODemoCN].[dbo].[OCRD]

3. 隐连接

就是不那么明显地连接,不想内连接和外连接,有直接和明显的 JOIN,LEFT JOIN,RIGHT JOIN

隐连接语法:

SELECT *
FROM [表1],[表2]
WHERE [条件1]

从效果上来说其实和内连接一样,内连接语法形式:

SELECT *
FROM [表1]
JOIN [表2] ON [条件1]

例子:

--隐连接
SELECT *
FROM OCRD T0,ORDR T1
WHERE T0.CardCode=T1.CardCode--内连接
SELECT *
FROM OCRD T0
JOIN ORDR T1
ON T0.CardCode=T1.CardCode

4. 自连接

顾名思义,即自我连接,和正常的表连接一样,分为自内连接(JOIN)和自外连接(LEFT/RIGHT JOIN)。一般的内连接和外连接都是连接两张不同的表,都是有时候需要连接相同的表。从语法上与一般连接无差别,仅是将同一张表引用两次,赋值为不同的表格。

:显示科目表的上级目录名称。

如下图,科目表的系统表单内容如下,有且仅有当前目录的编码和名称,以及上级目录的编码,此时要达到例题效果则需要使用自连接。

SELECT T0.AcctCode as '科目编号',T0.AcctName as '科目名称',T1.AcctName as '上级科目名称'
FROM OACT T0
LEFT JOIN OACT T1
ON T0.FatherNum = T1.AcctCode

查询结果如下:

5. 多表外连接

和正常的用 LEFT JOIN,RIGHT JOIN 连接的外连接一样,只不过多加几行。

按时间段查询科目总额汇总表,包括科目信息、时间范围、期初余额、借方发生额、贷方发生额、期末余额

在此问题中需要用到【日记账分录主表】、【日记账分录子表】、【科目表】。

DECLARE @BeginDate DateTime,@EndDate DateTime
SET @BeginDate=/* FROM JDT1 T0 WHERE T0.RefDate <= */ '[%0]'
SET @EndDate=/* FROM JDT1 T0 WHERE T0.RefDate >= */ '[%1]'SELECT 
T2.FatherNum AS '科目类别',T2.AcctCode AS '科目编号',T2.AcctName AS '科目名称'
,CAST(@BeginDate AS nvarchar(20)) +'~'+CAST(@EndDate AS nvarchar(20)) 日期范围
,SUM(CASE WHEN T0.RefDate<@BeginDate THEN (T1.Debit-T1.Credit) ELSE 0 END) AS '期初余额'
,SUM(CASE WHEN T0.RefDate BETWEEN @BeginDate AND @EndDate THEN T1.Debit ELSE 0 END) AS '借方发生额'
,SUM(CASE WHEN T0.RefDate BETWEEN @BeginDate AND @EndDate THEN T1.Credit ELSE 0 END) AS '贷方发生额'
,SUM(CASE WHEN T0.RefDate<=@EndDate THEN (T1.Debit-T1.Credit) ELSE 0 END) AS '期末余额'
FROM OJDT T0
INNER JOIN JDT1 T1 ON T0.TransId=T1.TransId
INNER JOIN OACT T2 ON T1.Account=T2.AcctCode
WHERE T0.RefDate<=@EndDate
GROUP BY T2.FatherNum,T2.AcctCode,T2.AcctName

6. UNION ALL

在需要创造一个新列时,比如一部分用户需要填入内容 [A],一部分需要填入内容 [B],此时使用 UNION ALL 将两个结构完全一致的表格进行合并,实现上述需求。

:制作一个销售出货单,查出客户编码、客户名称、物料编号、物料名称、出货的物料数量。

这里不能单纯地考虑出货单,需要进一步

SELECT T0.CardCode,T0.CardName,T0.DocDate,T0.DocNum,T1.ItemCode,T1.Dscription,T1.Quantity
FROM ODLN T0
INNER JOIN DLN1 T1 ON T0.DocEntry=T1.DocEntry
WHERE T0.DocDate BETWEEN '[%0]' AND '[%1]' AND T0.CardName = '[%2]'UNION ALLSELECT T0.CardCode,T0.CardName,T0.DocDate,T0.DocNum,T1.ItemCode,T1.Dscription,T1.Quantity*-1
FROM ORDN T0
INNER JOIN RDN1 T1 ON T0.DocEntry=T1.DocEntry
WHERE T0.DocDate BETWEEN '[%0]' AND '[%1]' AND T0.CardName = '[%2]'

查询管理器运行效果:

查询管理器的基本使用见《SAP B1 基础实操 - 查询管理器(基础版)》;代码中 sql server 并不支持的 SAP 查询特殊符号等见《SAP B1 查询管理器 - 新建类别/专用sql语法》

二、一个对比例子

要求:查找买了物料 A00001 的客户的详细信息,包含客户编号、客户名称、电话号码、联系人。

方法一:多表外连接

SELECT DISTINCT T0.CardCode,T0.CardName,T0.CntctPrsn,T0.Phone1
FROM OCRD T0
LEFT JOIN ORDR T1 ON T1.CardCode=T0.CardCode --多表外连接
LEFT JOIN RDR1 T2 ON T1.DocEntry=T2.DocEntry 
WHERE T2.ItemCode = 'A00001'

方法二:子查询

其中会涉及到的子查询见同专栏文章《SQL Server 查询设置 - LIKE/DISTINCT/HAVING/排序》中 四-3 部分

SELECT CardCode,CardName,CntctPrsn,Phone1
FROM OCRD
WHERE CardCode IN (SELECT CardCode -- 子查询
FROM ORDR T0
INNER JOIN RDR1 T1 ON T0.DocEntry=T1.DocEntry
WHERE T1.ItemCode = 'A00001')

 查询结果一致。

相关文章:

SQL Server 实战 - 多种连接

目录 背景 一、多种连接 1. 复合连接条件 2. 跨数据库连接 3. 隐连接 4. 自连接 5. 多表外连接 6. UNION ALL 二、一个对比例子 背景 本专栏文章以 SAP 实施顾问在实施项目中需要掌握的 sql 语句为偏向进行选题&#xff1a; 用例&#xff1a;SAP B1 的数据库工具&am…...

【手术显微镜】市场高度集中,由于高端手术显微镜的制造技术主要掌握于欧美企业

摘要 HengCe (恒策咨询&#xff09;是全球知名的大型咨询机构&#xff0c;长期专注于各行业细分市场的调研。行业层面&#xff0c;重点关注可能存在“卡脖子”的高科技细分领域。企业层面&#xff0c;重点关注在国际和国内市场在规模和技术等层面具有代表性的企业&#xff0c;…...

IDEA 2024 配置Maven

Step 1:确定下载Apache Maven版本 在IDEA 2024中&#xff0c;随便新建一个Maven项目&#xff1b; 在File下拉菜单栏中&#xff0c;找到Setings&#xff1b; 在Build&#xff0c;Execution&#xff0c;Deployment中找到Maven 确定下载的Apache Maven版本应略低于或等于IDEA绑…...

Admin.NET框架使用宝塔面板部署步骤

文章目录 Admin.NET框架使用宝塔面板部署步骤&#x1f381;框架介绍部署步骤1.Centos7 部署宝塔面板2.部署Admin.NET后端3.部署前端Web4.访问前端页面 Admin.NET框架使用宝塔面板部署步骤 &#x1f381;框架介绍 Admin.NET 是基于 .NET6 (Furion/SqlSugar) 实现的通用权限开发…...

Flutter中的Future和Stream

在 Flutter 中&#xff0c;Future 和 Stream 都是用于处理异步操作的类&#xff0c;它们都基于 Dart 的异步编程模型&#xff0c;但是它们的使用场景和工作方式有所不同。以下是它们的区别以及各自适用的场景。 目录 一、Future1、基本使用2、异常处理1. catchError2. onError…...

107.【C语言】数据结构之二叉树求总节点和第K层节点的个数

目录 1.求二叉树总的节点的个数 1.容易想到的方法 代码 缺陷 思考:能否在TreeSize函数内定义静态变量解决size的问题呢? 其他写法 运行结果 2.最好的方法:分而治之 代码 运行结果 2.求二叉树第K层节点的个数 错误代码 运行结果 修正 运行结果 其他写法 1.求二…...

spring boot支持那些开发工具?

Spring Boot 支持多种开发工具&#xff0c;以帮助开发者更高效地进行应用开发。以下是小编给大家分享几种常用的开发工具及其特点&#xff1a; IntelliJ IDEA&#xff1a; IntelliJ IDEA 是一款非常流行的 Java IDE&#xff0c;它提供了对 Spring Boot 的全面支持&#xff0c;…...

Go-MediatR:Go语言中的中介者模式

在Go语言中&#xff0c;确实存在一个与C#中的MediatR类似的组件包&#xff0c;名为Go-MediatR。 Go-MediatR是一个受.NET中MediatR库启发的Go语言实现&#xff0c;它专注于通过中介者模式简化命令查询责任分离&#xff08;CQRS&#xff09;模式的处理和在事件驱动架构中的应用…...

5.11【机器学习】

先是对图像进行划分 划分完后&#xff0c; 顺序读取文件夹&#xff0c;在文件夹里顺序读取图片&#xff0c; 卷积层又称为滤波器&#xff0c;通道是说滤波器的个数&#xff0c;黑白通道数为1&#xff0c;RGB通道个数为3 在输入层&#xff0c;对于输入层而言&#xff0c;滤波…...

在 CentOS 上安装 Docker:构建容器化环境全攻略

一、引言 在当今的软件开发与运维领域&#xff0c;Docker 无疑是一颗璀璨的明星。它以轻量级虚拟化的卓越特性&#xff0c;为应用程序的打包、分发和管理开辟了崭新的高效便捷之路。无论是开发环境的快速搭建&#xff0c;还是生产环境的稳定部署&#xff0c;Docker 都展现出了…...

Python练习(2)

重复元素判定续。利用集合的无重复性来编写一个程序如果有一个元素出现了不止一次则返回true但不要改变原来列表的值&#xff1a; 一&#xff1a; def has_duplicates(lst): # 使用集合来存储已经见过的元素 seen set() for item in lst: if item in seen: # 如果元素已经在…...

如何实现一套键盘鼠标控制两台计算机(罗技Options+ Flow功能快速实现演示)

需求背景 之前我写过一篇文章如何实现一套键盘鼠标控制两台计算机&#xff08;Mouse Without Borders快速上手教程&#xff09;_一套键鼠控制两台电脑-CSDN博客 当我们在局域网内有两台计算机&#xff0c;想使用一套键鼠操控时&#xff0c;可以安装Mouse Without Borders软件…...

现代应用程序中基于 Cell 架构的安全防护之道

在飞速发展的软件开发领域&#xff0c;基于 Cell 的架构日益流行起来。其概念源自船舶舱壁的设计准则&#xff0c;即单独的水密舱室能允许故障孤立存在。通过将这个概念应用于软件&#xff0c;我们创建了一个架构&#xff0c;将应用程序划分为离散的、可管理的组件&#xff0c;…...

【导航查询】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...

【基础分析】——Qt 信号和槽的机制 优点

QT信号和槽机制的优点包括&#xff1a; 1、类型安全&#xff1a; 信号和槽的签名必须是等同的&#xff0c;即信号的参数类型和参数个数必须与接收该信号的槽的参数类型和参数个数相同。 2、松散耦合&#xff1a; 信号和槽机制减弱了Qt对象的耦合度。激发信号的Qt对象无须知道…...

Vue3学习宝典

1.ref函数调用的方式生成响应式数据&#xff0c;可以传复杂和简单数据类型 <script setup> // reactive接收一个对象类型的数据 import { reactive } from vue;// ref用函数调用的方式生成响应式数据&#xff0c;可以传复杂和简单数据类型 import { ref } from vue // 简…...

leecode96.不同的二叉搜索树

在画的过程中发现规律&#xff0c;每次选择不同的节点作为根节点&#xff0c;左右两边的节点再排列组合一下就能求出总数 class Solution { public:int numTrees(int n) {vector<int> dp(n1,0);dp[0]1;for(int i1;i<n;i)for(int j0;j<i;j)dp[i]dp[i-j-1]*dp[j];ret…...

树莓派基本配置-基础配置配置

树莓派基本配置 文章目录 树莓派基本配置前言硬件准备树莓派刷机串口方式登录树莓派接入网络ssh方式登录树莓派更换国内源xrdp界面登录树莓派远程文件传输FileZilla 前言 树莓派是一款功能强大且价格实惠的小型计算机&#xff0c;非常适合作为学习编程、物联网项目、家庭自动化…...

手机卡限速丨中国移动5G变3G,网速500kb

以下猜测错误&#xff0c;又有新的猜测&#xff1a;河南移动的卡出省限速。可能是因为流量结算。 “2024年7月1日起&#xff0c;中国移动集团内部将开启跨省流量结算” 在深圳四五年了&#xff0c;之前没有过&#xff0c;就从上个月开始。11月底解除限速&#xff0c;12月刚开…...

SpringCloud之OpenFeign:OpenFeign与Feign谁更适合你的SpringCloud项目?

目录 一、OpenFeign简介1、OpenFeign是什么&#xff08;1&#xff09;核心概念&#xff08;2&#xff09;工作原理&#xff08;3&#xff09;主要特点&#xff08;4&#xff09;使用场景&#xff08;5&#xff09;与Feign的区别&#xff08;6&#xff09;总结 2、OpenFeign与Fe…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...