当前位置: 首页 > 知识库问答 >
问题:

使用where子句从表1中选择不在表2中的特定数据

夔修伟
2023-03-14

我想从表1中选择不在表2中的数据,但我必须从表1中选择特定的数据

我的数据表

CREATE TABLE IF NOT EXISTS `table3` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `acc_id` int(11) NOT NULL DEFAULT '0',
  `did` int(11) NOT NULL,

  PRIMARY KEY (`id`)
) 



CREATE TABLE IF NOT EXISTS `table2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `acc_id` int(11) NOT NULL,
  `table1_id` int(11) NOT NULL,
  `did` int(11) NOT NULL,

  PRIMARY KEY (`id`)
) 


CREATE TABLE IF NOT EXISTS `table1` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `acc_id` int(11) NOT NULL DEFAULT '0',

  `name` varchar(50) DEFAULT NULL,
 PRIMARY KEY (`id`)

)

我想做什么

选择名称,id从表1其中id!=(从表2选择table1_id加入表3table2.acc_id=table3.acc_id其中table2.did=4759505和table2.acc_id=2)table1.acc_id=2

如果子查询返回一行,上面的查询工作正常,但如果子查询返回多行,则不正常

谢谢

共有1个答案

孟祯
2023-03-14

您可以只更改!=tonot in

select name, id
from table1
where id not in (select table1_id
                 from table2 join
                      table3
                      on table2.acc_id = table3.acc_id
                      where table2.did = 4759505 and table2.acc_id = 2
                ) and
      table1.acc_id = 2;

注意:您还应该确保子查询中的table1_id永远不会是NULL。通常,我更喜欢not EXISTS

select name, id
from table1
where not exists (select table1_id
                  from table2 join
                       table3
                       on table2.acc_id = table3.acc_id
                       where table2.did = 4759505 and table2.acc_id = 2 and
                             table1_id = table1.id
                 ) and
      table1.acc_id = 2;

这将更直观地处理NULL值。

 类似资料:
  • 问题内容: 我有2张桌子。一个是一张桌子,上面有可以学习的东西。有一个JID描述了每种类型的行,并且对于每一行都是唯一的。第二张表是已经学习过的东西的日志(JID)以及学习它的人的用户ID。我目前正在使用它来选择JID的所有数据,但是只能选择用户根据userid学到的那些数据。 现在,我需要选择要学习的东西行,但只选择用户ID尚未学习的东西。我显然对此很陌生,请忍受。:)我尝试使用IS NULL,

  • 我有一个问题...在表1中,我有一个id,我必须比较表2中的id,然后获取表2中的第二个id,并将其与表3进行比较,得到一个数据作为结果。例子 如果我查找id 1,结果必须是Sea。如果我查找id 2,结果必须是Hello。 谢谢!

  • 我正在使用Spring JPA执行所有数据库操作。但是,我不知道如何在Spring JPA中从表中选择特定的行(通过简单的WHERE子句连接)? 用户类: 存储库:

  • 问题内容: 理想情况下,我需要一个等于 但这是非法的。 我不能使用自动递增的字段。 row_number()是需要选择的行。 我该怎么办? 编辑:嗯,我使用iSql * plus进行练习,出于某些原因,使用limit和auto_increment是非法的。我最终创建了一个序列和一个触发器,并且每次输入一个条目时,ID都增加了1。 问题答案: 您可以使用代替。 如文档所述, 第一个参数指定要返回的第

  • 我假设我可以做这样的事情,但这样会处理乐观锁情况吗(我通过表上的版本列使用它)

  • 问题内容: 我要实现以下目标: 表的当前状态(my_table) (my_table2)的查询结果 表的预期状态(my_table) 可以在一个更新查询中完成吗?我正在RHEL 5.0上寻找Sybase ASE 12.5 编辑: 我找不到Sybase的解决方案,但该问题的当前答案适用于MS SQL Server。 问题答案: 更新 在MS SQL Server中,您将执行此操作。OP指出这在Syb