2011-10-26 3 views
0

私はSQLコードに続くいる他のいくつかのコマンドを使用して()EXISTSしかし、うまくいきません。ads<>'0'ads<>('0')m.ads<>0などSQL:使用は

なぜそれが機能していないと思いますか?

「動作しません」つまり、「広告<> 0」という行を追加すると、(この行を入力しなかった場合と同様に)クエリ結果に変更はありません。 代わりに、 'ads = 0'行を追加すると、ゼロの値(実際に存在する)がないフィールドのように空の結果が出力されます

+1

「動作しません」と定義します。エラーメッセージが出ますか? – Phil

+4

あなたの質問やデータが間違っていて、質問から 'EXISTS'を完全に削除することができます。あなたは 'ads <> 0'状態でちょっと試しましたか?最小限のテストケースに絞り込むことは、デバッグの重要な技術です。 –

+0

'ads == 0' **のレコードがなく、' posts'のレコードが一致しているようです – Phil

答えて

1

あなたの望む通りにWHERE声明の句を書いてください。 members.adsを想定し

はあなたが示したようEXISTSを使用することができるはず...

SELECT m.email 
FROM members m 
WHERE m.ads <> 0 
AND EXISTS (
    SELECT 1 
    FROM posts p 
    WHERE p.email = m.email 
) 
ORDER BY m.ads DESC 
0

整数データ型です。参加するとあなたはまた、もちろん、それを書くことができます。

また
SELECT DISTINCT m.email 
    FROM members AS m 
    JOIN posts AS p ON p.email = m.email 
WHERE (m.ads<>0) 
ORDER BY ads DESC 

、あなたは「DISTINCT」操作を押し下げ、サブクエリを使用することにしたかもしれません:

SELECT m.email 
    FROM members AS m 
    JOIN (SELECT DISTINCT p.email FROM posts AS p) AS q ON q.email = m.email 
WHERE (m.ads<>0) 
ORDER BY ads DESC 

で存在できメンバーテーブルの個別のメールアドレスごとに1つの結果が表示されます。複数のメンバーが電子メールアドレスを共有できるようにする場合は、依然として外側のクエリにDISTINCTが必要な場合があります。

しかし、オープニングポイントを繰り返すには、EXISTS演算子を使用して示したように他の句を使用できるようにする必要があります。