2017-10-06 8 views
-1

で働いていないではない私は2つのテーブルのプロジェクトや部門を持っている私は、プロジェクトのテーブルからプロジェクトの所有者を取得したいが、私はコード句でmysqlの

select p.* from project p inner join department d on p.department_string_id=d.department_string_id WHERE p.project_owner NOT IN d.department_head 

を持っていますが、私query.Whatでの構文エラーは、私がwrong.Why「NOT IN」句が機能していませんでした示しています。あなたは(()にカンマ区切りで)複数の値を確認したいとき

+0

'd.department_head'は何ですか?単なる値であれば、 '!='が必要です。それはカンマ区切りリストだなら、あなたは*恐ろしく*間違ったデータベースをやっている(しかし、 'FIND_IN_SET()'あなたを救うかもしれません)。複数の行がある場合は、 'JOIN'の代わりに' NOT EXISTS'を使うことができます... –

+0

いくつかのサンプルデータとその結果を共有できますか?それは私たちがあなたを助けやすくなるでしょう。 – Mureinik

+0

あなたは['expr NOT IN(value、...)'](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_not-in)の構想について話していますか? ? – axiac

答えて

1

NOT INは動作します。単一のレコードを照合するために、あなたが変数の値(例:p.project_owner NOT IN (1,2,3,..)またはNOT IN (SELECT d.department_head FROM department d))のコレクションに存在するかどうかを確認するために使用される!=または

select p.* from project p inner join department d on 
p.department_string_id=d.department_string_id WHERE p.project_owner != 
d.department_head 
1

NOT IN<>使用することができます。この場合

、あなたが使用する必要があります!=代わりのNOT INあなたは値を一つずつチェックしているので。このクエリを使用して

select p.* 
from project p 
inner join department d on p.department_string_id = d.department_string_id 
WHERE p.project_owner != d.department_head 
0

私はあなたが

select p.* from project p 
left join department d on 
p.department_string_id=d.department_string_id 
WHERE p.project_owner is null 

ところでinまたはnot inがこの方法で使用されていない欲しいものを達成すると思います。コレクションから値を取得します。

+0

申し訳ありません。ありがとうございます。間違いなく私は "is"の代わりに "in"を書いています。ありがとうございました。 –

0

ちょうど単一のものNOT IN (foo, bar, ..)要素の集合ではないに対するNOT IN試験。あなたが達成したい内容に応じて、あなたの問題には2つのソリューションがあります

  1. あなたは一つの値に対してテストする必要がある場合は、単一の値を除外するために<>または!= 演算子を使用することができます。

  2. department_headリスト全体を除外したい場合は、別のクエリを使用してリストNOT IN (select field_name form table)を取得できます。このように:

select p.* from project p inner join department d on p.department_string_id=d.department_string_id WHERE p.project_owner NOT IN (select d.department_head from department d)

0

は、このクエリを使用し

select p.* from project p 
    left join department d on 
    p.department_string_id=d.department_string_id 
    WHERE d.department_head is null or d.department_head<>p.project_owner