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つの結果を得る。
位置はすでに成功したアプリケーションを持っている場合は、同じ位置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'
)
注:
このような重複は、 'SELECT'に列' applicationstatus'が含まれていないため、クエリは無視されます。 – Andrew
実際はそうではありませんが、後で読みやすくするためにapplicationstatusを追加しました。 PositionID3212はアプリケーション状態がなくてもまだ表示されます。フェリックスのExistを使うことのアドバイスがうまくいった。 – ilovetaufu