2017-02-12 33 views
2

助けてください!MySQLのクエリの結果はありません

employee, 
assign, 
vehicle. 

わずか2従業員が1台の車を占めることができる: は、私は3つのテーブルを持っています。私は、どの車両も収容していないすべての従業員を選択する必要があります。

クエリ: "USER1" または "USER2" 内のすべてのセルが満たされている場合

select EID, 
    Employee_name 
from employee 
where EID not in (
     select user1 
     from assign 
     ) 
    and EID not in (
     select user2 
     from assign 
     ) 

このクエリが動作します。アサインテーブルが "USER1" または "USER2" のNULL値を持つ場合

割り当てテーブル値

enter image description here

クエリ出力が空

クエリ結果

enter image description here

あります

値を入力すると、すべてのEID(s)が返されます。 d employee_name(s) は、割り当てられたテーブルのUser1とUser2にありません。すべてのuser1とuser2がいっぱいになると正常に動作します。 assign.user1またはassign.user2が空であるかどうかにかかわらず、利用可能なすべての従業員を表示するようにこのクエリを再作成するにはどうすればよいですか。

+0

まだ苦労しています。 http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-queryを参照してください。 – Strawberry

答えて

1

あなたはnot existsを使用することができます。

select eid, 
    employee_name 
from employee e 
where not exists (
     select 1 
     from assign a 
     where e.eid in (a.user1, a.user2) 
     ); 
+0

これはSQLですか?私はMySQLを使用しており、この構文はiveが学んだものとは異なります – Noobz

+0

はい、MySQL上でうまく動作するはずです。試してみてください。 – GurV

+0

ありがとう、私はあなたがこのように名前を変更することができるか分からなかった。 – Noobz

0

あなたはどちらの答えが正常に動作し、同様NOT NULL

SELECT eid, employee_name 
FROM employee 
WHERE eid not in (
    SELECT user1 
    FROM assign 
    WHERE user1 IS NOT NULL 
    UNION 
    SELECT user2 
    FROM assign 
    WHERE user2 IS NOT NULL 
) 
0

を使用することができます。クエリが機能しない理由について詳しく知りたい場合は、ここで簡単な説明をします。

この問題は、SQLがNULLの値をどのように扱うかによって発生します。 SQLは、2つの値の論理に基づいているのではなく、3つの値の論理、すなわちTRUE,FALSEおよびUNKNOWNに基づいています。どちらかuser1user2列でNULL値と比較されるたびにEIDクエリで は、結果はどちらもTRUEFALSEが、UNKNOWNです。

これらのうちもう一つの方法は、機能COALESCE()またはIFNULL()使用することです。すべてのこれらの詳細は

w3schools on coalesce(), ifnull() and others

を、あなたは他の情報源の中で、Oracleのドキュメントを確認することができます。

oracle documentation on nulls

希望すると助かります!

+0

ありがとう、そんなに意味がある – Noobz

+0

喜んでそれが助け! – jzeta

関連する問題