Sql 从“字段不等于其他表中的字段的位置”中选择
我正在SQLite3中运行以下脚本: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
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。在任何情况下,它肯定不会伤害,只有在有帮助的情况下才有帮助。您是否有一些关于不推荐的产品以及原因的参考资料?