SQL 条件相交

2023-12-25

我想知道我们是否可以做相交条件。 有一些查询,但结果是错误的(始终为空)。 我写下它应该产生的结果。

DECLARE @CAN_USE_TABLE1 BIT
DECLARE @CAN_USE_TABLE2 BIT
DECLARE @CAN_USE_TABLE3 BIT
DECLARE @CAN_USE_TABLE4 BIT

DECLARE @TABLE1 AS TABLE ( ABC INT ) -- values will be 1,2,3
DECLARE @TABLE2 AS TABLE ( ABC INT ) -- values will be 1,2
DECLARE @TABLE3 AS TABLE ( ABC INT ) --EMPTY TABLE
DECLARE @TABLE4 AS TABLE ( ABC INT ) --EMPTY TABLE
INSERT INTO @TABLE1 VALUES (1)
INSERT INTO @TABLE1 VALUES (2)
INSERT INTO @TABLE1 VALUES (3)
INSERT INTO @TABLE2 VALUES (1)
INSERT INTO @TABLE2 VALUES (2)

SET @CAN_USE_TABLE1 = 1
SET @CAN_USE_TABLE2 = 1
SET @CAN_USE_TABLE3 = 1
SET @CAN_USE_TABLE4 = 0

SELECT ABC FROM @TABLE1 WHERE @CAN_USE_TABLE1 = 1
INTERSECT
SELECT ABC FROM @TABLE2 WHERE @CAN_USE_TABLE2 = 1
INTERSECT 
SELECT ABC FROM @TABLE3 WHERE @CAN_USE_TABLE3 = 1
INTERSECT
SELECT ABC FROM @TABLE4 WHERE @CAN_USE_TABLE4 = 1

--RESULT SHOULD BE :
--  NO RESULT
--
--  BECAUSE, AT THIS STAGE, TABLE1 AND TABLE2 AND TABLE3 SHOULD BE INTERSECTED. AND BECAUSE TABLE3 IS EMPTY, THE RESULT IS EMPTY.

SET @CAN_USE_TABLE1 = 1
SET @CAN_USE_TABLE2 = 1
SET @CAN_USE_TABLE3 = 0
SET @CAN_USE_TABLE4 = 0

SELECT ABC FROM @TABLE1 WHERE @CAN_USE_TABLE1 = 1
INTERSECT
SELECT ABC FROM @TABLE2 WHERE @CAN_USE_TABLE2 = 1
INTERSECT 
SELECT ABC FROM @TABLE3 WHERE @CAN_USE_TABLE3 = 1
INTERSECT
SELECT ABC FROM @TABLE4 WHERE @CAN_USE_TABLE4 = 1

--RESULT SHOULD BE :
--  1
--  2
--
--  BECAUSE, AT THIS STAGE, TABLE1 AND TABLE2 SHOULD BE INTERSECTED

SET @CAN_USE_TABLE1 = 0
SET @CAN_USE_TABLE2 = 1
SET @CAN_USE_TABLE3 = 0
SET @CAN_USE_TABLE4 = 0

SELECT ABC FROM @TABLE1 WHERE @CAN_USE_TABLE1 = 1
INTERSECT
SELECT ABC FROM @TABLE2 WHERE @CAN_USE_TABLE2 = 1
INTERSECT 
SELECT ABC FROM @TABLE3 WHERE @CAN_USE_TABLE3 = 1
INTERSECT
SELECT ABC FROM @TABLE4 WHERE @CAN_USE_TABLE4 = 1

--RESULT SHOULD BE :
--  1
--  2
--
--  BECAUSE, AT THIS STAGE, ONLY TABLE 2 SHOULD BE USED

一个空集INTERSECT与任何其他集合的 ed 将始终为空。这就像乘以 0。你总是得到 0。

有条件的INTERSECT将需要动态查询或临时表,如下所示:

初始化

DECLARE @CAN_USE_TABLE1 BIT
DECLARE @CAN_USE_TABLE2 BIT
DECLARE @CAN_USE_TABLE3 BIT
DECLARE @CAN_USE_TABLE4 BIT

DECLARE @TABLE1 AS TABLE ( ABC INT )
DECLARE @TABLE2 AS TABLE ( ABC INT )
DECLARE @TABLE3 AS TABLE ( ABC INT )
DECLARE @TABLE4 AS TABLE ( ABC INT )
DECLARE @RESULT AS TABLE ( ABC INT ) --Adding this result table
INSERT INTO @TABLE1 VALUES (1)
INSERT INTO @TABLE1 VALUES (2)
INSERT INTO @TABLE1 VALUES (3)
INSERT INTO @TABLE2 VALUES (1)
INSERT INTO @TABLE2 VALUES (2)

SET @CAN_USE_TABLE1 = 1
SET @CAN_USE_TABLE2 = 1
SET @CAN_USE_TABLE3 = 0
SET @CAN_USE_TABLE4 = 0

加工

INSERT INTO @RESULT
SELECT ABC FROM @TABLE1 WHERE @CAN_USE_TABLE1=1 UNION
SELECT ABC FROM @TABLE2 WHERE @CAN_USE_TABLE2=1 UNION
SELECT ABC FROM @TABLE3 WHERE @CAN_USE_TABLE3=1 UNION
SELECT ABC FROM @TABLE4 WHERE @CAN_USE_TABLE4=1

DELETE r FROM @RESULT r
WHERE NOT EXISTS(SELECT 1 FROM @TABLE1 WHERE ABC=r.ABC)
AND @CAN_USE_TABLE1=1;

DELETE r FROM @RESULT r
WHERE NOT EXISTS(SELECT 1 FROM @TABLE2 WHERE ABC=r.ABC)
AND @CAN_USE_TABLE2=1;

DELETE r FROM @RESULT r
WHERE NOT EXISTS(SELECT 1 FROM @TABLE3 WHERE ABC=r.ABC)
AND @CAN_USE_TABLE3=1;

DELETE r FROM @RESULT r
WHERE NOT EXISTS(SELECT 1 FROM @TABLE4 WHERE ABC=r.ABC)
AND @CAN_USE_TABLE4=1;

SELECT * FROM @RESULT;

Result

1
2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL 条件相交 的相关文章

  • NVARCHAR 变量在Where 子句中不起作用

    在 SQL Server 我想是 2018 我不知道如何判断 中 我的变量不起作用WHERE的条款NVARCHAR 比较应该返回值 但它什么也没返回 如果我只是手动输入声明的文本 它会突然起作用并返回值 没有任何逻辑原因应该有任何不同 类型
  • postgresql:插入...(选择*...)

    我不确定它是否是标准 SQL INSERT INTO tblA SELECT id time FROM tblB WHERE time gt 1000 我正在寻找的是 如果 tblA 和 tblB 位于不同的数据库服务器中怎么办 Postg
  • 获取在任何日期创建的表的列表?

    我遇到了这样的情况 我想查找我在 2012 年 9 月 14 日 2012 年 9 月 14 日 在 sql server 上创建的表 是否有任何查询会列出在此日期创建的这些表 SELECT FROM sys tables WHERE cr
  • Java、Oracle 中索引处缺少 IN 或 OUT 参数:: 1 错误

    您好 我使用 Netbeans 8 0 2 和 Oracle 11g Express Edition 在 JSF 2 2 中编写了一个图书馆管理系统 我有几个名为 书籍 借阅者 等的页面 以及数据库中一些名为相同名称的表 我的问题是这样的
  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • 获取mysql中逗号分隔行中不同值的计数

    一个表 Jobs 有 2 列 JobId 城市 当我们保存工作时 工作位置可能是多个城市 如下所示 JobId City 1 New York 2 New York Ohio Virginia 3 New York Virginia 我如何
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不
  • 从 call_log 中获取最大并发通话数

    我需要帮助在 MySQL 5 0 77 中编写一个查询 根据下面所示的数据 办公室一天的通话量 返回并发电话呼叫的峰值数量 我只是想知道一天中任何特定时间同时打电话的人数最多是多少 首先 这是 MySQL 表 CREATE TABLE ca
  • SQL 标准是否允许函数名和括号之间有空格

    检查一些 RDBMS 我发现类似的事情 SELECT COUNT a SUM b FROM TABLE 允许 注意聚合函数和括号之间的空格 谁能提供一个指向 SQL 标准本身定义的指针 任何版本都可以 编辑 以上在postgres中工作 m
  • ORA-12728: 正则表达式中的范围无效

    我想检查表中是否插入了有效的电话号码 所以我的触发代码在这里 select start index into mob index from gmarg mobile operators where START INDEX substr ne
  • 没有提示指令的直连接中表的顺序是否会影响性能?

    所有基于 SQL 的 RDBMS 10 年前的版本 直接连接查询 没有提示指令 中的表顺序是否会对最佳性能和内存管理产生影响 听说最后一个join应该是最大的表 您的数据库的查询优化器如何处理这种情况 回答你的问题 是的 表的顺序在连接中有
  • 如何创建没有循环关系的树形表?

    CREATE TABLE TREE node1 id UUID REFERENCES nodes object id NOT NULL node2 id UUID REFERENCES nodes object id NOT NULL CO
  • 支持 >65k 行的 Excel VBA SQL 驱动程序

    在 Excel 2010 中通过 VBA 查询 Excel 数据时 我遇到一个有趣的问题 我正在使用这些驱动程序连接到 xls 或 xls x m 文件 Sub OpenCon ByRef theConn As Connection ByV
  • 向带有检查约束 SQL 的表添加列

    我想向表中添加一列 然后添加一个检查约束以确保其大于 0 我似乎无法让它在 oracle sl Developer 中运行 Alter TABLE store101 add column Base salary Number 7 2 con
  • 更改表添加列并在同一条件 IF 语句中更新新列

    我正在尝试添加列并在同一 if 语句中更新它 BEGIN TRAN IF NOT EXISTS SELECT 1 FROM sys columns WHERE Name N Code AND Object ID Object ID N Te
  • SKIP加锁和nowait的区别

    pl sql 中 SKIP 锁定游标和 nowait 游标之间的区别 我认为我找到的这张图片是描述差异的最佳例子 详细说明 http viralpatel net blogs oracle skip locked
  • 在 plpgsql 函数中使用 quote_ident()

    我是创建 plpgsql 函数的新手 我需要一些有关在函数内部执行的动态命令上使用 quote ident 甚至 quote literal 的说明 希望有人能给我一个关于它们如何在函数内部工作的具体解释 TIA 这是一个例子 EXECUT
  • MYSQL:如何在同一查询中联接两个表,两次引用同一个表

    我有两张桌子 我正在尝试将下面的示例两个表与表 1 引用表 2 两次结合起来 例如 如果我查看表 1 组 2 和成员 7 它应该查找表 2 中的 ID 并给出输出 Group Members Name Name 2 7 Blue Dog T
  • 默认情况下在sql日期时间列中插入null/空值

    如何在 SQL Server 中创建一个表 默认日期时间为空 而不是1900 01 01 00 00 00 000我得到了 我的意思是 如果没有插入值 则默认值应该为 null 空等 如果没有插入值 默认值应该是null empty 在表定
  • Oracle SQL PLS-00049:错误的绑定变量

    我收到此错误 这似乎是列拼写问题 然而 我 99 确信我拼写的所有内容都是正确的 但我看不出有任何理由会出现我所犯的错误 这是来源 CREATE OR REPLACE TRIGGER update qoh trigger AFTER INS

随机推荐

  • java.lang.IllegalStateException:迁移未正确处理表

    如何将 Room 中的空字段类型迁移为文本 现在我面临这个问题 java lang IllegalStateException 迁移未正确处理 data table 预期 TableInfo name data table columns
  • 将令牌添加到 lucene 令牌流

    我写了一个TokenFilter它在流中添加令牌 1 测试表明它有效 但我不完全明白为什么 如果有人能阐明语义 我将不胜感激 特别是 在 恢复状态 是不是意味着我们要么覆盖当前的token 要么覆盖捕获状态之前创建的token 这大致就是我
  • javascript document.write() 从页面中删除 html 并在空白页面中显示结果[重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript document write 的替代品是什么 https stackoverflow com questions 4537963 javascript what are alte
  • 登录twitter总是进入回调失败方法

    没有显示错误 但是当单击按钮时 它总是会回调失败方法 互联网处于活动状态并且密钥有效 我使用调试器看到以下结果 E Twitter Invalid json
  • 使用 JQUERY 检测tinyMCE 文本区域

    在我们的一些表单上 我们将文本区域转换为tinyMCE 文本区域 如何在 jquery 中判断给定的文本区域是否已被转换 我注意到 tinyMCE 会在初始化时将原始文本区域的显示更改为无 然后使用 mceEditor 类创建相邻的跨度 但
  • 堆空间不足

    我遇到了堆空间问题 我的程序很简单 有两个参与者 发送和接收 发送 参与者每秒将 10000 个对象传递给 接收 而接收则发布这些对象 接收者收到的对象被保存在容器中 但容器每秒都被清空 所以容器不可能空间不足 现在 在 420000 个对
  • Node.js 传递变量

    我正在寻找一些经验丰富的 Node js 程序员的指导 我遇到的最大问题是将变量传递到单独的模块中 例如 在我的 server js 中 我有以下内容 var db mongoose createConnection localhost t
  • 移动 lambda:一旦移动捕获了仅移动类型,如何使用 lambda? [复制]

    这个问题在这里已经有答案了 这个答案 https stackoverflow com a 20669290 1858225解释了如何在 C 14 中移动捕获 lambda 中的变量 但是一旦你移动捕获了一个不可复制的对象 例如std uni
  • 文本环绕绝对定位的 div

    我知道有一些关于类似主题的问题 但它们主要涉及浮动 div 图像 我需要将图像 和 div 绝对定位 向右 但我只想让文本围绕它流动 如果我浮动 div 它会起作用 但我无法将其放置在我想要的位置 因为文本只是在图片后面流动 div cla
  • Ruby:将嵌套 Ruby 哈希转换为非嵌套哈希

    现在 我有一个服务器调用返回以下 Ruby 哈希值 id gt ct factualId gt outOfBusiness gt false publishedAt gt 2012 03 09 11 02 01 general gt nam
  • 为什么MIPS汇编器有多个寄存器用于返回值?

    我刚刚开始学习MIPS汇编程序并意识到有两个寄存器 http en wikipedia org wiki MIPS architecture Compiler register usage用于返回值 首先 我认为它的实现是因为有些语言可能返
  • 如何删除使用 distutils 安装的程序?

    我已经用这个 setup py 安装了一个 python 应用程序 usr bin env python from distutils core import setup from libyouandme import APP NAME A
  • 将 JPanel 导出到图像

    所以我一直在尝试将在 JPanel 上绘制的图像导出为图像 我一直在使用这个方法 BufferedImage image new BufferedImage getWidth getHeight BufferedImage TYPE INT
  • MySQL 表作为 FIFO/队列

    我们如何才能将Mysql表视为有限的FIFO缓冲区 队列 目标是 该表一次只能有 N 行 当插入一行时 应删除最旧的行以保持行数为 N 请建议方法 UPDATE 抱歉 伙计们 正如很多人指出的那样 我将问题从 STACK 更改为 FIFO
  • Maven 和 Jenkinsfile - 跳过前面的阶段

    我正在探索 Jenkins 的暂存功能 我想设计一个快速且精益的设置 基本上 Jenkins 提倡使用阶段来划分构建过程 并提供有关构建进度的良好视觉反馈 So the Jenkinsfile有点像 stage Build bat mvn
  • 如何将 HTML NSData 转换为 NSString?

    我在用着 NSData dataWithContentsOfURL 创建两个 NSData 实例 我想比较这些实例以了解它们的不同之处 由于它们都来自同一个网站 因此使用字符串查找不同之处将帮助我突出显示已更改的实际元素 是否可以将这些数据
  • Hibernate EnVers 中的 @NotAudited 和 RelationTargetAuditMode.NOT_AUDITED 有什么区别?

    NotAudited Audited targetAuditMode RelationTargetAuditMode NOT AUDITED OneToMany mappedBy booking OrderBy bookingOrder p
  • Django Rest框架,将api响应Content-Encoding设置为gzip

    我正在开发 django 项目 当其他服务器通过 api 调用请求某些数据时 该项目充当其他服务器的分发服务器 该数据采用 JSON 形式 并且非常大 所以我在想有没有什么方法可以设置我的 DRF APIView 响应来提供输出的 JSON
  • 使用 django Rest Framework jwt 将信息添加到 JWT 令牌主体

    我使用 django Rest Framework 和 djangorestframework jwt 包来创建 JWT 令牌以进行授权 在前端 我可以解码令牌并获取用户名 电子邮件和 user id 不过我想检索一些额外的信息 例如 如果
  • SQL 条件相交

    我想知道我们是否可以做相交条件 有一些查询 但结果是错误的 始终为空 我写下它应该产生的结果 DECLARE CAN USE TABLE1 BIT DECLARE CAN USE TABLE2 BIT DECLARE CAN USE TAB