2016-05-27 11 views
2

SQLのクエリを実行して、アプリケーション状態の列で、まだ開いている位置を示すSではない結果を取得しています。 U = Unsuccessful、O =継続中、S =成功の3つのアプリケーションステータスがあります。これは正常に動作します。以下は私が実行しているコードです。MySQLは特定の行を無視しますか?

SELECT DISTINCT position.position_ID, Title, EmployerName, Industry 
FROM position 
JOIN application ON position.position_id = application.position_id 
JOIN employer ON position.employer_id = employer.employer_id 
WHERE applicationstatus != 'S' 

私が直面している問題は、上記のクエリコードで、position_ID 3212が3つのアプリケーションを受信したとしましょう。私はこのような位置(成功したものを除いて)について2つの結果を得る。

enter image description here

位置はすでに成功したアプリケーションを持っている場合は、同じ位置IDを持つ行は無視されますように、それをフィルタリングする方法はありますか?私は意味のあるエイリアスを使用するようにクエリを書き換えてきた

SELECT DISTINCT 
    p.position_ID, 
    Title, 
    EmployerName, 
    Industry 
FROM position p 
JOIN application a 
    ON p.position_id = a.position_id 
JOIN employer e 
    ON p.employer_id = e.employer_id 
WHERE 
    applicationstatus != 'S' 
    AND NOT EXISTS(
     SELECT 1 
     FROM application 
     WHERE 
      position_id = a.position_id 
      AND applicationstatus = 'S' 
    ) 

注:

+0

このような重複は、 'SELECT'に列' applicationstatus'が含まれていないため、クエリは無視されます。 – Andrew

+0

実際はそうではありませんが、後で読みやすくするためにapplicationstatusを追加しました。 PositionID3212はアプリケーション状態がなくてもまだ表示されます。フェリックスのExistを使うことのアドバイスがうまくいった。 – ilovetaufu

答えて

2

は、成功したアプリケーションとposition Sを除外するNOT EXISTS条件を追加します。コードの可読性とメンテナンス性を向上させるためにもこれを行う必要があります。

+0

それは非常に速かった!それも動作します!多くのフェリックスに感謝します!私は存在条件を知らなかった、フェリックスありがとう!あなたが述べたようにエイリアスを使用し始めるでしょう、ありがとう! – ilovetaufu

+0

@ilovetaufu喜んで私は助けることができます。あなたの問題を解決した場合は、この回答を受け入れてください。 –

関連する問題