SELECT有2个子查询问题

时间:2016-08-04 14:18:15

标签: sql oracle

我正在使用Oracle,我有下一个查询:

SELECT count(*) FROM table1;

将结果21932抛出,然后我将下一个查询设置为子查询:

SELECT count(*) FROM table2 WHERE attr1 IN (SELECT attr1 FROM table1);

这引发了我的结果10489。所以我想删除不在此集合中的其余行,然后运行DELETE句子我想检查行数是否正确,并使用下一个查询:

SELECT count(*) FROM table1 WHERE attr1 NOT IN 
   (SELECT attr1 FROM table2 WHERE attr1 IN (SELECT attr1 FROM table1));

行数应为11443 (total - 10489),但该语句会抛出3743行,为什么这是结果?我怎么能得到我想要删除的行数?。

提前致谢。

3 个答案:

答案 0 :(得分:2)

您正计算table2 attr1table1中存在的记录table2。这并没有告诉我们attr1中没有这种匹配的记录。可能是1条记录,可能是一百万条记录都有不同的attr1,可能是一百万条记录都有相同的attr1等等所以没有数学可以告诉我们你的上一次查询应该是什么结果英寸

...或者有两个表和#calculate button cal = ttk.Button(main, text = 'Calculate!') cal.grid(row = 4, column = 2) #height entry box hb = tk.Entry(main, textvariable = height) hb.grid(row = 2, column = 2) hb.bind('<Key>', lambda event: val(hb.get())) #validation error message vrs = tk.Label(main, text = 'Please enter a number in the box') vrs.grid(row = 8, column = 2) #so that its position is saved but won't appear until validation fails vrs.grid_remove() #validation function def val(value): if value.isdigit(): print('valid') vrs.grid_remove() cal.state(['!disabled']) else: print('invalid') vrs.grid() cal.state(['disabled']) 的内容,但您还没有告诉我们。

答案 1 :(得分:1)

您在where子句中的选择嵌套可能是个问题。为了简单起见,我会说:

backref

答案 2 :(得分:1)

由于NULL既不是table1.attr1也不是NULL,因此差异可能会告诉您IN (...)NOT IN (...)的一些信息。

尝试:select case when attr1 is null then 1 end as count_nulls from table1 - 这将直接告诉您table1.attr1中有多少空值。