2017-10-04 6 views
0

SuspendedまたはInactive(これらの値ストリングは 'ステータス列'のデータテーブルに表示されます)と識別される従業員を除外する照会を作成しようとしています。従業員のいずれかのステータスがある場合、Failデータテーブルではなく、On Holdデータテーブルに表示されます。以下のシナリオではMySQL照会複合ステートメントが予期された結果を返さない

、「ジェーンドゥは」彼女Approval失敗しましたが、彼女はInactiveあるので、彼女はOn HoldなくFailデータテーブルに表示されるように処理されなければなりません。

私たちは、次のクエリを実行するときに我々はFailの表に、これらの結果を予想:

Employee ID FirstName LastName Status Eligibility Approved 
    123456  Jim  James  OK   OK  Not Approved 
    777889  Ray  Raymond OK   Ineligible  OK 

しかし、その代わりに、我々は以下を参照してください。ここ

Employee ID FirstName LastName Status Eligibility Approved 
    123456  Jim  James  OK   OK  Not Approved 
    123412  Jane  Doe  Inactive  OK  Not Approved 
    777889  Ray  Raymond OK  Ineligible  OK 

は、私たちが実行したクエリですが、Inactive従業員は継続最初の複合ステートメントにもかかわらず表示されます(このデータにはSuspended従業員がいません。

SELECT 
    emp_id, 
    first_name, 
    last_name, 
    status, 
    eligibility, 
    approved 
FROM 
    `pass_fail` 
WHERE(
     status <> 'Inactive' 
OR 
     status <> 'Suspended' 
) 
AND (
     eligibility ='Ineligible' 
OR 
    approved = 'Not Approved') 

答えて

0

変更したり、

し、2つのステータス条件の間
SELECT emp_id, first_name, last_name, status, eligibility, approved 
FROM `pass_fail` 
WHERE status <> 'Inactive' 
    AND status <> 'Suspended' 
    AND (eligibility ='Ineligible' OR approved = 'Not Approved') 
1

私はinnot inを使用します。あなたのロジックによると、クエリは次のようになります。

SELECT emp_id, first_name, last_name, status, eligibility, approved 
FROM pass_fail 
WHERE status NOT IN ('Inactive', 'Suspended'); 

あなたのテキストがeligibilityapprovedが使用されるようになっている方法については説明しません。しかし、私は推測する:

SELECT emp_id, first_name, last_name, status, eligibility, approved 
FROM pass_fail 
WHERE status NOT IN ('Inactive', 'Suspended') AND 
     (eligibility = 'Ineligible' OR approved = 'Not Approved'); 
+0

ありがとうゴードン!私たちはあなたのソリューションをテストしました。トム – tomish

関連する問題