如何在SQL中获取2个表中不匹配的行?

2024-03-20

我有两个 SQL Server 表:CHANNELS & SUBSCRIBERS,我想从中获取行CHANNELS不存在于SUBSCRIBERS在某种条件下。

我尝试过INNEROUTER(LEFT) JOIN但这对我不起作用,他们都给了我相同的答案,这不是我想要的。

这些表是这样的:

CHANNELS table:

CREATE TABLE CHANNELS 
(
     ChanID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) PRIMARY KEY,
     name varchar(30) NOT NULL,
     type varchar(10) NOT NULL,
     description varchar(500) NOT NULL,
     nickname varchar(20) NOT NULL 
           REFERENCES USERS(nickname),
     subscribersnum int NOT NULL
)

订阅者 table:

CREATE TABLE SUBSCRIBERS 
(
     nickname varchar(20) NOT NULL REFERENCES USERS(nickname),
     ChanID int NOT NULL REFERENCES CHANNELS(ChanID)
)

外键nickname取自其他一些名为USERS

假设在CHANNELS我们有以下几行:

 CHanID |  type  |   name   | description | (createdby) | subscribersnum 
        |        |          |             |  nickname   |
-------------------------------------------------------------------------
    1     public    first         hi          Matty         3
    2     public    second        hii         Rose          2
    3     private   third         hiii        Matty         2
    4     public    forth         hiiii       Lucy          5

and in SUBSCRIBERS我们有:

nickname   |    ChanID
------------------------
    Jonny         1
    Matty         3
    Jonny         4
    Rose          3
    Rose          2

我想选择所有public昵称“Jonny”的用户尚未订阅的频道 ID 和名称,因此在上面的示例中我希望查询返回两行:

ChanId  |   name  
-----------------

   2       second

我所做的查询如下:

SELECT 
    CHANNELS.ChanID 
FROM 
    CHANNELS 
LEFT JOIN 
    SUBSCRIBERS ON (CHANNELS.type = 'public' 
                    AND SUBSCRIBERS.nickname = 'Jonny' 
                    AND CHANNELS.ChanID != SUBSCRIBERS.ChanID);

SELECT 
    CHANNELS.ChanID 
FROM 
    CHANNELS 
INNER JOIN 
    SUBSCRIBERS ON (CHANNELS.type = 'public' 
                    AND SUBSCRIBERS.nickname = 'Jonny' 
                    AND CHANNELS.ChanID != SUBSCRIBERS.ChanID);

但他们没有做我需要的事情。

有什么建议么?

Thanks


当你想知道记录是否存在时,使用[NOT] EXISTS or [NOT] IN。您想要表中的数据channels,因此请从此表中进行选择,并将您的条件写在WHERE clause.

select chanid, name
from channels
where type = 'public'
and chanid not in (select chanid from subscribers where nickname = 'Jonny');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在SQL中获取2个表中不匹配的行? 的相关文章

  • 使用 SqlDataReader.IsDBNull 时使用列名

    我已经得到了从 SQL DB 读取数据的代码 我不知道应该如何编辑它 以便我可以使用原始列名称而不是列索引 string query SELECT FROM zajezd WHERE event thisrow AND year klien
  • 尝试将 Asp.Net Memebership 数据库部署到 SQL Azure

    我一直在尝试让 ASP net 会员服务提供商与托管在 SQL Azure 中的其余数据库配合使用 我已针对数据库运行适当的 SQL Azure 特定脚本来进行设置 这些脚本可从 Microsoft 获取 http archive msdn
  • 字符串文字上的 SQL Server T-SQL N 前缀[重复]

    这个问题在这里已经有答案了 这可能是一个菜鸟问题 但我发现了一些 T SQL 查询示例来验证数据库大小SELECT and WHERE clause here http technet microsoft com en us library
  • 复制数据库的最佳方法是什么?

    当我想要复制数据库时 我总是创建一个新的空数据库 然后将现有数据库的备份恢复到其中 然而 我想知道这是否真的是最不容易出错 最不复杂且最有效的方法 可以跳过创建空数据库的步骤 您可以在恢复过程中创建新数据库 这实际上是我所知道的克隆数据库最
  • 从每个子集中选择最大值

    我在这里敲头 我觉得自己很愚蠢 因为我确信我以前做过类似的事情 但我一辈子都不记得是怎么做的 我想那一天 gt 假设我有以下数据 gt 和一个返回此数据的查询 gt 但我想要这个 ID FirstID ID FirstID ID First
  • 如何在 SQL Server 中创建文件格式

    我正在尝试在 SQL Server 2017 中试验外部文件 但在第一步中遇到了困难 数据是管道分隔的 我试图遵循文档中的语法 这需要一个FILE FORMAT 以下是 Microsoft 的语法 CREATE EXTERNAL TABLE
  • SQL Server Management Studio v18 的命令行参数登录

    使用 SQL Server 身份验证时是否仍然可以从命令行打开 SQL Server Management Studio v18 根据微软的发行说明 由于安全风险 他们删除了 P 命令行参数 因此 可以从命令行使用 SQL Server 身
  • 如何在不使用实体框架的情况下从.Net Core连接到SQL Server?

    我们如何从 Net Core连接到SQL Serverwithout使用实体框架 你可以简单地使用传统的方式SqlConnection 这是一个例子 public class BaseDataAccess protected string
  • 在 azure Devops 管道中部署 SQL 时遇到错误

    我在 azure Devops 的发布管道中使用 sql DACPAC 类型的部署 但出现以下错误 我对 SQL 不了解 有什么建议吗 Publishing to database database name on server Serve
  • sql server 2008 对 exec 语句的限制

    我只需要仔细检查 t sql 中的 EXEC 命令是否有字符限制 如果我有一个带有 varchar max 的变量并使用 EXEC 执行命令 你认为这样可以吗 thanks 应该没问题 根据这篇 MSDN 文章 http msdn micr
  • 合并sql中的列

    我正在使用 SQL Server 2017 有一个存储过程 其中我有一个带有连接的简单选择 例如 SELECT p legacyKey AS JobNumber p Name AS JobName G Label AS DesignStat
  • 让 Hibernate 和 SQL Server 与 VARCHAR 和 NVARCHAR 良好配合

    我目前正在大型数据库的某些表中启用 UTF 8 字符 这些表已经是 MS SQL 类型 NVARCHAR 此外 我还有几个使用 VARCHAR 的字段 Hibernate 与 JDBC 驱动程序的交互存在一个众所周知的问题 例如 参见在 h
  • 我可以根据多列删除数据库重复项吗?

    I 不久前问过这个问题 https stackoverflow com questions 4952250 how to delete duplicates from a database table based on a certain
  • 如何进行数据透视并计算列平均值

    我承认这是迄今为止我必须面对的最复杂的 SQL 语句之一 我在这件事上碰壁了 我希望有人能帮我一把 我在数据库中有这张表 Item ActiveTime sec DateTime 1 10 2013 06 03 17 34 22 gt Mo
  • 使用 MS Access 链接表连接到 SQL Server 后端时是否可能发生 SQL 注入

    我一直在对此进行一些研究 但到目前为止还是一片空白 情况是这样的 我正在开发一个链接到 SQL Server 后端的 MS Access 前端 我在某种程度上使用 Access 中的链接表 表单访问 SQL DB 这样 当用户更新表单中的值
  • SQL Server 2008 错误 233

    我正在使用以下 sql 脚本在 SQL Server 2008 中创建新登录名 CREATE LOGIN xyz WITH PASSWORD xyz DEFAULT DATABASE master DEFAULT LANGUAGE us e
  • 分组和切换列和行

    我不知道这是否会被正式称为枢轴 但我想要的结果是这样的 Alex Charley Liza 213 345 1 23 111 5 42 52 2 323 5 23 1 324 5 我的输入数据采用这种形式 Apt Name
  • 如何拥有引用另一个表的检查约束?

    我在 SQL Server 2008 数据库中有以下表 tblItem 其中有一个ItemID field 好项目 它还有一个 ItemID 字段 并且有一个指向 tblItem 的外键 tblBadItem 它也有一个 ItemID 字段
  • 为什么我的代码会产生错误:该语句没有返回结果集[重复]

    这个问题在这里已经有答案了 我正在从 Microsoft SQL Server Studio 执行以下查询 该查询工作正常并显示结果 SELECT INTO temp table FROM md criteria join WHERE us
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ

随机推荐

  • 打印同一行两个字符串之间的文本

    我已经搜索了很长时间 但未能找到解决我的问题的有效答案 我从 HTML 文件中提取了一行sed 162 d skinlist html 其中包含文本 a href skin dwarf red beard 734 title Dwarf R
  • python.exe:没有名为 pyuic5 的模块

    我想将 ui 文件转换为 py 但 pyuic5 无法识别 当我进入 python 目录时 会出现此错误消息 如何修复这个错误 更通用的选项是 python m PyQt5 uic pyuic filename ui o filename
  • SPFileVersionCollection - 为什么版本按混合顺序排序?

    SPFileVersionCollection 和 SPListItemVersionCollection 版本控制对我来说似乎不一致 不一致对我来说不是问题 但排序顺序是问题 SPListItemVersionCollection 我可以
  • 重命名变量时使用 numlist 循环

    我正在尝试使用 tidyverse dplyr 重命名 R 中的两种类型的变量 第一个类型 var a year 我想将其重命名为 sample year 第二种变量 var b 7 我想将其重命名为 index year 第二个变量 va
  • 检测 SharePoint 文件是否打开

    第一次在这里发帖 如果我偏离了任何指导方针 我深表歉意 这是我的挑战 我有一个保存到 SharePoint 的状态跟踪文件 宏将打开此状态跟踪器 记录一些信息 保存并关闭文件 我试图包含一些代码来检测另一个用户是否打开了该状态文件 否 则当
  • 如何释放使用 mmap 分配的内存?

    我已经使用分配代码mmap 但由于分段错误而无法释放它 我已经做好了mprotect PROT WRITE使其可写 但我仍然无法释放它 我的代码 1 include
  • 如何在 PHP 中将多个 作为数组发布?

    这样在 PHP 中我可以将它们处理为 foreach POST checkboxname as i gt value 做这样的事情
  • 如何在本机反应中使用双击?

    如何在本机反应中使用双击 我希望如果用户双击图像而不是 setliked 状态触发器 那么我该如何在 rn 中做到这一点 就像 Instagram 帖子一样 他们在 rn 中是否有任何预构建包可以让我这样做 我正在使用 rn 0 70 5
  • 在 MATLAB 中从数组中选择元素

    我知道在 MATLAB 中 在一维情况下 您可以选择具有索引的元素 例如a 1 5 3 返回 a 的第 1 个 第 5 个和第 3 个元素 我有一个二维数组 并且想根据我拥有的一组元组选择单个元素 所以我可能想要得到a 1 3 a 1 4
  • 我无法在 Windows 上安装 pyaudio?如何解决“错误:需要 Microsoft Visual C++ 14.0”? [复制]

    这个问题在这里已经有答案了 我有一台 Windows 10 电脑 我想安装 pyaudio 以将其与我的聊天机器人一起使用 由 chatterbot 提供支持 我尝试了两种不同的方法来安装 pyaudio 第一种方法是在命令提示符下执行此操
  • Eclipse RCP:ClassNotFoundException 或如何使其他包加载我的类

    详细信息 我正在尝试使用 Jalapeno 框架将我的 RCP 应用程序与 Cache 数据库连接起来 建立连接后 我尝试从表中获取所有数据 就像墨西哥胡椒手册中一样 if objManager null return DBClass co
  • 二叉搜索树的定义中是否允许重复键?

    我正在尝试找到二叉搜索树的定义 并且我一直在到处寻找不同的定义 有人说对于任何给定的子树 左子键小于或等于根 有人说对于任何给定的子树 右子键大于或等于根 我以前的大学数据结构书上说 每个元素都有一个键 并且没有两个元素具有相同的键 bst
  • Terraform - 我应该使用 user_data 还是 Provisioner 来引导资源?

    看来我可以使用user data使用模板文件或 远程执行 provisioner使用内联命令进行引导 那么哪一个被认为更惯用呢 你应该使用user data The 用户数据 http docs aws amazon com AWSEC2
  • 如何使用 RSAEncryption 创建带有 SHA1 摘要的 PKCS7/CMS?

    我创建了一个pkcs7块 可以自己验证 但是结果和我使用OpenSSL的伙伴不一样 我创建的p7块无法被我的伙伴验证 我们仔细检查代码 只找到c 中找不到对应项的代码 OPENSSL signInfo gt digest enc alg g
  • ASP.Net 使用什么 URL 重写器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么 android:fullBackupOnly 默认值是 false?

    In https developer android com guide topics manifest application element https developer android com guide topics manife
  • 如何避免链接多个 AsyncTask 调用?

    我必须对 Web 服务进行多次调用 但每个步骤都使用上一步中的值 因此现在我有一个巨大的 AsyncTasks 链 每个 AsyncTask 都在上一步的 AsyncTask 的 onPostExecute 中执行 这非常非常难看 而且很难
  • Perl DBIx::Class 可以覆盖从数据库检索列的方式吗?

    直到今天我才使用过 DBIx Class 所以我对它完全陌生 我不确定这是否可能 但基本上我的 SQLite 数据库中有一个表 其中有一个时间戳列 时间戳列的默认值为 CURRENT TIMESTAMP SQLite 将其存储在 GMT 时
  • 总是收到“消息”:“未经身份验证。” - Laravel 护照

    我一整天都找到了很多教程 我的设置与所有基本教程完全相同 目前 我可以访问http localhost oauth token成功地将令牌返回给我 之后 我使用 ARC Advanced Rest Client 来进行调用我自己的 api
  • 如何在SQL中获取2个表中不匹配的行?

    我有两个 SQL Server 表 CHANNELS SUBSCRIBERS 我想从中获取行CHANNELS不存在于SUBSCRIBERS在某种条件下 我尝试过INNER和OUTER LEFT JOIN但这对我不起作用 他们都给了我相同的答