“ NOT IN table.col”和“ NOT IN SELECT col FROM table”之间的区别

汤姆汤姆

一个非常基本的问题。但是之间有什么区别

SELECT t.col
FROM table t, other_table o
WHERE t.col NOT IN o.col

SELECT col
FROM table
WHERE col NOT IN (SELECT col FROM other_table)

从语义上来说,这听起来与我相当,但是第一个创建了重复项。我理解错了什么?

哈特公司

第一个甚至不会在大多数RDBMS中运行,但是在oracle中,它将返回除where t.col=之外的所有记录组合,o.col如果您将其添加o.col到自己的数据库中,则会看到此记录。SELECT

后一个查询返回的记录与中的任何记录table都不共享该colother_table

最好的例子说明:

表格1

| ANIMAL |
|--------|
|    dog |
|    cat |
|  horse |

表2

| ANIMAL |
|--------|
|    dog |
|   fish |

查询:

SELECT t."animal",o."animal"
FROM Table1 t, Table2 o
WHERE t."animal" NOT IN o."animal"

| ANIMAL | ANIMAL2 |
|--------|---------|
|    cat |     dog |
|  horse |     dog |
|    dog |    fish |
|    cat |    fish |
|  horse |    fish |


SELECT t."animal"
FROM Table1 t
WHERE t."animal" NOT IN (SELECT o."animal" FROM Table2 o)

| ANIMAL |
|--------|
|  horse |
|    cat |

演示:SQL Fiddle

基本上,您在第一个查询中具有笛卡尔乘积,该乘积将返回两个表中记录的每个组合,但是您的WHERE条件会过滤掉其中的一个。第二个查询没有任何JOIN隐式/显式查询,它只是从一个表中获取记录并根据碰巧从另一个表中提取的条件进行过滤。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 SqlCommand 中添加列和表名作为参数,如“SELECT @col from @table”查询

与SELECT col1 FROM table WHERE col2 = somestring对应的Django ORM是什么?

data [,“ col”]和data $ col之间的区别

MySql SELECT * FROM table_name WHERE col_name IN(任何值)

DB :: Table和DB :: Select之间的区别

df[df['col a']] 和 df['col a'] 的区别?

SQL Server:从{TABLE}中选择DISTINCT [COL1],其中[COL2] ='A'和[COL2] <>'B'

SELECT to_char(date_col, 'YYYY-MM') from table - 在子查询中不起作用

SQL Server:DELETE <Table>和DELETE from <Table>之间的区别

Spark scala 中 GroupByKey($"col") 和 GroupBy($"col") 的区别

Bootstrap中的col-lg-*,col-md- *和col-sm- *有什么区别?

蜂房:NULL col_name和NULL作为表DDL中的col_name之间的区别

PostgreSQL:在table_B的INSERT INTO table_A(col_b)中选择col_d table_B.col_c = table_A.col_a

当Table1.COL = Table2.Col时,从Table1中删除行

sys.col $和sys.coltype $之间的区别

其中来自 tab1 的 col1 和来自 tab2 的 col1 in select from tab3

如何在`data.table :: fread`中同时使用col.names和colClasses?

SELECT * FROM(VALUES(x,y))AS TableLiteral(Col1,Col2)的名称

这些索引之间 SELECT 查询速度的差异:*UNIQUE(col1, col2)* vs *FK(col1), FK(col2)*

在data.table的aj表达式中使用..col

fread下降:错过col名称的重复(data.table R)

QueryDSL如何写“在哪里?col1和col2之间”

计算pivos中pivot_table的均值和总和,按两个单独的所需col值排序

从MYSQL表A返回行,其中table_A.col_1 = table_b.col_2,而不使用左外部联接?

如何在mongodb查询中编写SELECT FROM testing WHERE int_col + int_col2 > 123?

CREATE TABLE和CREATE ANY TABLE特权之间的区别

C:'struct Table *const' 和'const struct Table *' 之间的区别?

na()。drop()和filter(col.isNotNull)之间的区别(Apache Spark)

SELECT FROM table,ORDER BY IF(...)