1

NOT INを使用する代わりに、次のSQLステートメントをFULL JOINとして記述できますか?

select * from [user] u 
   AND u.user_id NOT IN (SELECT user_id FROM job)

私はこのようなことをしたいです:

SELECT u.* FROM [user] u
FULL JOIN job uj ON u.user_id = uj.user_id
WHERE uj.user_id IS NULL

FULL JOINを使用して、ジョブテーブルにレコードがないすべてのユーザーを取得したいと考えています。

4

3 に答える 3

3

は必要ありませんFULL OUTER JOIN。あなたは:が必要LEFT JOINです

select * 
from [user] u 
left join job uj
  on u.user_id = uj.user_id
where uj.user_id IS NULL

Aは、テーブルに一致する行があるかどうかLEFT JOINに関係なく、からすべての行を返します。userjob

次に、where j.user_id is nullフィルターを追加すると、テーブル内のすべてのレコードのみが返されuserます。

これは、適切な結合構文を理解しようとするときに役立つ結合の優れた視覚的説明です。

両方のバージョンのクエリ(および)を含むSQL Fiddleデモを参照してください。これは、両方が同じデータを返すことを示しています。NOT INLEFT JOIN

于 2013-02-06T02:17:35.537 に答える
2
SELECT u.*
FROM [user] u
LEFT JOIN job j on (u.user_id = j.user_id)
WHERE j.user_id is NULL

なぜFULLJOINを使用する必要があるのですか?上記はあなたが探しているものをあなたに与えます。

于 2013-02-06T02:17:42.000 に答える
2

あなたはleft outer join。おそらくNULLにはならないため、 Afull outer joinは少し冗長です。uj.user_id

2つのクエリは同等ですが、データベースによっては実行プランが異なる場合があります。

于 2013-02-06T02:17:53.117 に答える