0

私は苦労しています。おそらくこれまでで最も単純な問題です。私のSQLの知識は、これを達成することをほとんど制限しています。JobTitle、Note、および NoteType を表示する SQL クエリを作成しようとしています。これが問題です。最初のジョブにはメモがありませんが、結果に表示されるはずです。システムノートは決して表示されるべきではありません。期待される結果は次のようになります

結果:

--------------------------------------------
|ID      |Title      |Note      |NoteType  |
--------------------------------------------
|1       |FirstJob   |NULL      |NULL      |
|2       |SecondJob  |CustomNot1|1         |
|2       |SecondJob  |CustomNot2|1         |
|3       |ThirdJob   |NULL      |NULL      |
--------------------------------------------

.

My query (doesn't work, doesn't display third job)

SELECT J.ID, J.Title, N.Note, N.NoteType
FROM JOB J
LEFT OUTER JOIN NOTE N ON N.JobId = J.ID
WHERE N.NoteType IS NULL OR N.NoteType = 1

マイ テーブル:

My JOB Table
----------------------
|ID      |Title      |
----------------------   
|1       |FirstJob   |
|2       |SecondJob  |
|3       |ThirdJob   |
----------------------


My NOTE Table
--------------------------------------------
|ID      |JobId      |Note      |NoteType  |
--------------------------------------------
|1       |2          |CustomNot1|1         |
|2       |2          |CustomNot2|1         |
|3       |2          |SystemNot1|2         |
|4       |2          |SystemNot3|2         |
|5       |3          |SystemNot1|2         |
--------------------------------------------
4

2 に答える 2

1

systemNotesを除外し、副選択を使用するだけです。

select * from job j 
left outer join (
  select * from note where notetype!=2
) n 
on j.id=n.jobid;

結合されたテーブルをその場所に含めると、左外部結合が内部結合として機能する可能性があります。

于 2012-11-12T15:34:55.607 に答える
1

これは一緒に真になることはできません (NoteType を同時に 1 だけでなく NULL にすることもできません):

     WHERE N.NoteType IS NULL AND N.NoteType = 1

NoteType が NULL または 1 であるかどうかORを確認するために代わりに使用することができます。

     WHERE N.NoteType IS NULL OR N.NoteType = 1

編集:修正されたクエリでは、3 番目のジョブは一致するため取得されませんJOB_IDが、その行は where 条件のために除外されます。

null 値を持つ 3 番目のジョブを取得するための回避策として、以下を試してください。

 SELECT J.ID, J.Title, N.Note, N.NoteType
 FROM JOB J
 LEFT OUTER JOIN 
 ( SELECT JOBID NOTE, NOTETYPE FROM NOTE 
   WHERE N.NoteType IS NULL OR N.NoteType = 1) N
 ON N.JobId = J.ID
于 2012-11-12T15:28:23.067 に答える