Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从“字段不等于其他表中的字段的位置”中选择_Sql_Sqlite - Fatal编程技术网

Sql 从“字段不等于其他表中的字段的位置”中选择

Sql 从“字段不等于其他表中的字段的位置”中选择,sql,sqlite,Sql,Sqlite,我正在SQLite3中运行以下脚本: drop table if exists B; drop table if exists C; create table B (a integer, b text, c text); insert into B values (1, "1.1", "B"); insert into B values (1, "2.1", "B"); insert into B values (3, "3.1", "B"); insert into B values (4

我正在SQLite3中运行以下脚本:

drop table if exists B;
drop table if exists C;

create table B (a integer, b text, c text);

insert into B values (1, "1.1", "B");
insert into B values (1, "2.1", "B");
insert into B values (3, "3.1", "B");
insert into B values (4, "4.1", "B");
insert into B values (5, "5.1", "B");
insert into B values (6, "6.1", "B");
insert into B values (7, "7.1", "B");

create table C (a integer);

insert into C (a) values (1), (3), (5);

select * from B where B.a <> C.a;
从B中选择*,其中a不在B中,选择a与C不同

这是标准的SQL

“不在”将排除选定集中的所有值。集合可以来自另一个表,不一定是常量值列表

DISTINCT是可选的,但它可能会在非常大的集合中产生更快的执行。

从B中选择*,其中a不在选择a和C中

这是标准的SQL

“不在”将排除选定集中的所有值。集合可以来自另一个表,不一定是常量值列表


DISTINCT是可选的,但它可能会在非常大的集合中产生更快的执行。

此要求可以用NOT EXISTS表示,如下所示:

select * from B 
where not exists (
  select 1 from C
  where C.a = B.a
);
对于B的每一行,如果B.a在C中不存在,则not EXISTS为TRUE,并返回该行

或者使用仅返回不匹配的B行的左联接:

select B.*
from B left join C
on C.a = B.a
where C.a is null;
看。 结果:


此要求可表示为不存在,如下所示:

select * from B 
where not exists (
  select 1 from C
  where C.a = B.a
);
对于B的每一行,如果B.a在C中不存在,则not EXISTS为TRUE,并返回该行

或者使用仅返回不匹配的B行的左联接:

select B.*
from B left join C
on C.a = B.a
where C.a is null;
看。 结果:


SELECT*FROM B其中a不在SELECT a FROM C中似乎有效…您知道此查询是否可以在Microsoft Access中生成吗?这是标准SQL,但我不使用MS Access来确定。为什么不将您的评论作为答案发布?我很乐意接受。另一方面:字符串文本的标准分隔符是单引号,而不是双引号。双引号用于包含特殊字符的别名,例如选择count*作为…中的行数。。。。在某些情况下,当混淆这两种情况时,您可能会得到不想要的结果,例如:where key=description会将列键的内容与列描述的内容进行比较,而不是与字符串“description”进行比较,如果存在具有该名称的列。从B中选择*其中a不在从C中选择a似乎有效…您知道此查询是否可以在Microsoft Access中生成吗?这是标准SQL,但我不使用MS Access来确定。为什么不将您的评论作为答案发布?我很乐意接受。另一方面:字符串文本的标准分隔符是单引号,而不是双引号。双引号用于包含特殊字符的别名,例如选择count*作为…中的行数。。。。在某些情况下,当混淆这两个名称时,您可能会得到不想要的结果,例如:where key=description会将列键的内容与列描述的内容进行比较,而不是与字符串“description”(如果存在具有该名称的列)进行比较。通常不建议使用DISTINCT with In。SQL旨在表达我们想要的东西,而不是DBMS如何实现这一点。在这种情况下,我们希望所有B行的A值不在C的A值集中。DBMS是否在集合上使用DISTINCT来执行此操作,应由DBMS自己决定。它通常最了解如何查找data.IN和NOT IN引用集。根据定义,集合由不同的值组成。但是,SQL引擎不能总是知道内部选择将作为一个集合来自动为您执行DISTINCT。在任何情况下,它肯定不会伤害,只有在有帮助的情况下才有帮助。您是否有一些关于不建议使用的参考资料以及原因?通常不建议使用DISTINCT with IN。SQL旨在表达我们想要的东西,而不是DBMS如何实现这一点。在这种情况下,我们希望所有B行的A值不在C的A值集中。DBMS是否在集合上使用DISTINCT来执行此操作,应由DBMS自己决定。它通常最了解如何查找data.IN和NOT IN引用集。根据定义,集合由不同的值组成。但是,SQL引擎不能总是知道内部选择将作为一个集合来自动为您执行DISTINCT。在任何情况下,它肯定不会伤害,只有在有帮助的情况下才有帮助。您是否有一些关于不推荐的产品以及原因的参考资料?