我正在使用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
行,为什么这是结果?我怎么能得到我想要删除的行数?。
提前致谢。
答案 0 :(得分:2)
您正计算table2
attr1
中table1
中存在的记录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
中有多少空值。