Mysql 如何选择sql语句未选择的记录?

Mysql 如何选择sql语句未选择的记录?,mysql,sql,Mysql,Sql,我有下面的sql查询。我对此sql查询未选择的所有记录感兴趣。我在下面做了一次尝试,但我的SQL语法有一个错误。有人能给我建议吗 SELECT * FROM codec_status NOT IN (SELECT * FROM codec_status WHERE version_er_r='0' OR ntpStatus_er_r='0' OR stAvailable_er_r='0' OR RXRate_er_r='0' OR TXRa

我有下面的sql查询。我对此sql查询未选择的所有记录感兴趣。我在下面做了一次尝试,但我的SQL语法有一个错误。有人能给我建议吗

SELECT *
FROM codec_status NOT IN
  (SELECT *
   FROM codec_status
   WHERE version_er_r='0'
     OR ntpStatus_er_r='0'
     OR stAvailable_er_r='0'
     OR RXRate_er_r='0'
     OR TXRate_er_r='0'
     OR DefaultCallRate_er_r='0'
     OR RemoteView_er_r='0'
     OR VoiceVlan_er_r='0'
     OR Transport_er_r='0'
   )

假设表codec_status的主ID只是ID。那么您应该这样做:

SELECT * FROM codec_status where id  NOT IN 
(SELECT id FROM codec_status WHERE version_er_r='0' OR ntpStatus_er_r='0' OR stAvailable_er_r='0' OR RXRate_er_r='0' OR TXRate_er_r='0' OR DefaultCallRate_er_r='0' OR RemoteView_er_r='0' OR VoiceVlan_er_r='0' OR Transport_er_r='0')

您应该学习逻辑门,这将在这些情况下对您有更多帮助。在这里使用

换成这个

SELECT * FROM codec_status WHERE version_er_r<>'0' AND ntpStatus_er_r<>'0' AND stAvailable_er_r<>'0' AND RXRate_er_r<>'0' AND TXRate_er_r<>'0' AND DefaultCallRate_er_r<>'0' AND RemoteView_er_r<>'0' AND VoiceVlan_er_r<>'0' AND Transport_er_r<>'0'

某些DBMS具有减号运算符:

select * from tablename where ....
minus
select * from tablename where ....
不幸的是,MySQL不支持减号运算符。如果您的表有一个ID列,您可以这样写:

select * from codec_status
where
  id NOT IN (select ID
             from
               codec_status
             where ....)
使用NOT IN时要小心,特别是当子查询返回空值时,但如果ID是主键,则应该没有问题

无论如何,您可以将查询编写为:

select * from codec_status
where NOT (
  version_er_r='0'
  OR ntpStatus_er_r='0'
  OR stAvailable_er_r='0'
  OR RXRate_er_r='0'
  OR TXRate_er_r='0'
  OR DefaultCallRate_er_r='0'
  OR RemoteView_er_r='0'
  OR VoiceVlan_er_r='0'
  OR Transport_er_r='0'
)
即使在这里,如果所有列都为null,您也必须小心null值。您希望在第一个查询或第二个查询中返回行吗?

只需使用not


我的SQL语法中有一个错误,为什么不共享错误消息,为什么让我们猜测?我从MYsqli得到:“1241-操作数应该包含1列”你确定你在我的子查询中只选择了ID吗?放在括号里的那个汉克斯兄弟!就这样。查询成功了,所有的数字最终都加起来了。
select * from codec_status
where NOT (
  version_er_r='0'
  OR ntpStatus_er_r='0'
  OR stAvailable_er_r='0'
  OR RXRate_er_r='0'
  OR TXRate_er_r='0'
  OR DefaultCallRate_er_r='0'
  OR RemoteView_er_r='0'
  OR VoiceVlan_er_r='0'
  OR Transport_er_r='0'
)
SELECT *
   FROM codec_status
   WHERE NOT 
    (version_er_r='0'
     OR ntpStatus_er_r='0'
     OR stAvailable_er_r='0'
     OR RXRate_er_r='0'
     OR TXRate_er_r='0'
     OR DefaultCallRate_er_r='0'
     OR RemoteView_er_r='0'
     OR VoiceVlan_er_r='0'
     OR Transport_er_r='0')