2017-03-01 14 views
-1

以下の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 TXRate_er_r='0' 
    OR DefaultCallRate_er_r='0' 
    OR RemoteView_er_r='0' 
    OR VoiceVlan_er_r='0' 
    OR Transport_er_r='0' 
    ) 
+2

を使用し、なぜあなたは私たちが推測作っていますか? – HoneyBadger

答えて

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') 
+0

私はMYsqliから取得しています: '#1241 - オペランドには1列が含まれています' – tim

+0

あなたは本当に私のサブクエリでIDのみを選択しましたか? (括弧内の1つ) – Whencesoever

+0

おかげです!それはそれだった。クエリが機能し、すべての数値が最終的に加算されます。 – tim

1

これらの条件でもっと役立つ論理ゲートを学ぶべきです。ここだけDe Morgan's Theorem

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') 

を使用して、この

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' 
0

と交換してくださいいくつかのDBMSは、MINUS演算子を持っている:

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使用しているとき、あなたのサブクエリがNULL値を返しますが、IDが主キーである場合は、問題はないはずです場合は特にcarefoulこと)。

とにかくあなたのようにクエリを記述できます。でも、ここにあなたがnull値に注意する必要があり、すべての列がNULLであれば(あなたが行があなたの最初のクエリで又は第二に返すことにしたい

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' 
) 

1?)

0

は、ちょうどその時、なぜエラーメッセージを共有していない「私は私のSQL構文でエラーが発生している」not

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') 
関連する問題