2012-02-03 12 views
2

私はSQLクエリを持っています。ここでは、私が立ち往生している部分です。2つのテーブルが等しくない

何らかの理由で、ユーザーがスタッフがいる部分だけが表示されますが、!=が機能していません。 staff.user_id = user.user_idだけを持っていて、両方のテーブルにあるすべてのユーザーを表示します。

誰かがなぜこのようなことが起こっているのか解説してください。

EDIT

TABLE USER      TABLE STAFF 
ID - NAME - TYPE    ID -  NUMBER 
1 - A - Staff    1 -  11111 
2 - B - Staff    2 -  22222 
3 - C - Customer 
4 - D - Customer 
5 - E - Staff 
6 - F - Staff 

はどのようにして、ユーザーのID 5と6を見つけるだろうか?

+0

どのデータベースエンジンを使用していますか? – Jamie

+0

@ウィル・オク、私は修正された質問を反映するために私の答えを編集しました。 – dgw

答えて

6

!=の代わりに<>を試してください。それはあなたが達成しようとしているかは明らかではありません

SELECT user.firstname, user.lastname, user.userid 
FROM user LEFT JOIN staff ON user.userid=staff.userid 
WHERE user.type = 'Staff' AND staff.userid IS NULL ; 
+0

私は同意します、<>は正式な構文です、ほとんどのSQLデータベースはサポートしています!=これは一般的なコーダー用語集ですが、等しくないための公式の構文ではありません。 – TravisO

+0

@ウィル必要な出力は何ですか? – dgw

+0

@Willあなたはstaffテーブルにリストされていない 'type = 'Staff''で' user'タグを付けますか? – dgw

2

は、編集された質問に対する答えを編集します。 2つのテーブル(ユーザーとスタッフ)を結合し、ユーザーの種類がスタッフで、ユーザーとスタッフの表の間のユーザーIDが一致しない結合条件を使用しています。

あなたは

SELECT DISTINCT user.firstname, user.lastname, user.userid 
FROM user u 
JOIN staff s ON (s.userid != u.userid) 
WHERE u.type = 'Staff' 

を言っているしかし、あなたはあなたの選択でスタッフテーブルから何かを使用していないJOIN構文を使用して。だから私は最初にそれに参加する必要性については不明ですか?

+0

私はユーザーの詳細、IDおよびタイプフィールドを持つユーザーテーブルをスタッフまたは顧客のいずれかに持っています。スタッフテーブルには、IDとスタッフ番号が割り当てられます。私がしたいことは、スタッフテーブルにないすべてのスタッフのリストを持っていることです。 user.userid = staff.useridを使用すると、staffテーブルとuserテーブルにあるすべてのスタッフが表示されますが、staffテーブルにないstaffはuserテーブルから取得します。私が何を意味するのか知っている場合 –

+0

申し訳ありません申し訳ありませんができる限り私は説明します。 –

4

OK、あなたのコメントに基づいて、私はこれがあなたが望むものだと思う:

SELECT DISTINCT user.firstname, user.lastname, user.userid 
FROM user u 
LEFT JOIN staff s ON (s.userid = u.userid) 
WHERE (s.userid is null) AND (u.type = 'Staff') 

左がそれらのために、一致するユーザーIDとを持っているユーザテーブル(左表)内のすべてのレコードを検索します参加それはしない。句

SELECT * 
    FROM user u 
    LEFT JOIN staff s ON (s.userid = u.userid) 
    WHERE (s.userid is null) 

が戻ってくるWHERE

ので修正クエリ

SELECT * 
FROM user u 
LEFT JOIN staff s ON (s.userid = u.userid) 

は、部分的に追加

 
1 - A - Staff    1 -  11111 
2 - B - Staff    2 -  22222 
3 - C - Customer   NULL NULL NULL 
4 - D - Customer   NULL NULL NULL 
5 - E - Staff    NULL NULL NULL 
6 - F - Staff    NULL NULL NULL 

を返します:

 
3 - C - Customer   NULL NULL NULL 
4 - D - Customer   NULL NULL NULL 
5 - E - Staff    NULL NULL NULL 
6 - F - Staff    NULL NULL NULL 

そして最後に、完全なクエリが

SELECT * 
    FROM user u 
    LEFT JOIN staff s ON (s.userid = u.userid) 
    WHERE (s.userid is null) AND (u.type = 'Staff') 

が戻ってくる戻ってくる:

 
5 - E - Staff    NULL NULL NULL 
6 - F - Staff    NULL NULL NULL 

注:ユーザーテーブルをと仮定すると一意である、 'DISTINCT' は冗長です。

2
You can try this also 

SELECT user.firstname, user.lastname, user.userid FROM user,staff where user.userid=staff.userid and user.type = 'Staff' AND staff.userid IS NULL;