Redian新闻
>
请帮我看看,什么地方错了?
avatar
请帮我看看,什么地方错了?# Database - 数据库
c*c
1
太不能理解了。
第一个query
select count(*) from my_table p。得到13500。很好
第二个query
select count(*) from my_table p where p.device_name in (select device_name
from device) 到13450。正常
第三个query
select count(*) from my_table p where p.device_name not in (select device_
name from device) 。 得到 0。嗯,我那50行去哪里了?
目的是,有些人把错误的device_name放进来了。我需要把那些错误的device找出来修
正。我们买的软件,不允许加foreign key之类的东东,而且有其他groups的人程序by
pass软件的interface,直接往database里塞东西。只好手工修改。
但是第三个query不应该返回 50 吗?
谢谢
avatar
c*d
2
因为那50行数据的device_name是null

by

【在 c***c 的大作中提到】
: 太不能理解了。
: 第一个query
: select count(*) from my_table p。得到13500。很好
: 第二个query
: select count(*) from my_table p where p.device_name in (select device_name
: from device) 到13450。正常
: 第三个query
: select count(*) from my_table p where p.device_name not in (select device_
: name from device) 。 得到 0。嗯,我那50行去哪里了?
: 目的是,有些人把错误的device_name放进来了。我需要把那些错误的device找出来修

avatar
c*c
3
对不起忘了说了,device name是device table 的primary key。
在table里是required field。我可以保证所有行都有device name。
这也是我为什么不理解怎么少了50行的地方。

【在 c*****d 的大作中提到】
: 因为那50行数据的device_name是null
:
: by

avatar
s*m
4
did other people put wrong device name in P table or Device table?
since device name column is primary key in the Device table, it's always non
-null, and unique. But P table is child table and device name can be null,
or duplicate. check those.
btw, if your company manages the database, your company should be able to
add foreign keys in the database although you might not be able to enforce
user input at front end UI.
avatar
gy
5
Second this!

non

【在 s**m 的大作中提到】
: did other people put wrong device name in P table or Device table?
: since device name column is primary key in the Device table, it's always non
: -null, and unique. But P table is child table and device name can be null,
: or duplicate. check those.
: btw, if your company manages the database, your company should be able to
: add foreign keys in the database although you might not be able to enforce
: user input at front end UI.

avatar
h*l
6
select a.device_name from my_device a left join device b on
a.device_name = b.device_name where b.device_name is null
这样就可以看到为什么my_device有什么不在device里面了. 估计是my_device的
device有NULL.

【在 c*****d 的大作中提到】
: 因为那50行数据的device_name是null
:
: by

avatar
c*e
7
not in (nulls), hahaha

【在 c***c 的大作中提到】
: 太不能理解了。
: 第一个query
: select count(*) from my_table p。得到13500。很好
: 第二个query
: select count(*) from my_table p where p.device_name in (select device_name
: from device) 到13450。正常
: 第三个query
: select count(*) from my_table p where p.device_name not in (select device_
: name from device) 。 得到 0。嗯,我那50行去哪里了?
: 目的是,有些人把错误的device_name放进来了。我需要把那些错误的device找出来修

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。