私はC#アプリケーションを作成していますが、Access.mdbを使用しています。私は電子メールメッセージとメッセージの関係を持つテーブルを持ったテーブルを持っています(各Eメールメッセージは複数のチームの作業者に割り当てられます)。SQL:別のテーブルにリレーションを持たないデータを選択してください
どのチームにも割り当てられていない、つまり2番目のテーブルにエントリがないか、または空のエントリがあるメッセージを最初のテーブルから取得したいとします。空のエントリでは正常に動作しますが、その割り当てエントリがまったくない行は返されません。
私は次のクエリを使用しています:
SELECT TOP 10 Mails.*
FROM Mails INNER JOIN MailAssignments ON Mails.msgId = MailAssignments.msgId
WHERE (Mails.msgId <= ?)
AND
(Mails.msgId NOT IN (SELECT msgId FROM MailAssignments))
OR (MailAssignments.forTeam IS NULL)
OR (MailAssignments.forTeam = '')
UPDATE:
をいくつかの条件にクエリはまた、中に関係を持つ行を返す必要がありますので、私は、JOINのいくつかの種類を使用する必要があります他のテーブル(例えば、誰かが自分のチームからのメッセージと割り当てられていないメッセージを表示したいとき)。
はUPDATE:
OK、私は私が空に割り当て、存在しないものだけをチェックする必要がないように、私は2番目のテーブルからすべての割り当てを削除することによってsimplierそれを作ることができますねまったく。しかし、私はまだ割り当てられていないデータと一緒に割り当てられたデータを表示する必要があります。そして、私は唯一の異なるパラメータを持つことになり、そのための1つのクエリを構築する必要が変更されました:/
UPDATE/SOLUTION:
を私はいくつかのより多くの調整が左サイドは基本的に私のためにトリックがしたJOINをやりました!そのヒントとあなたのすべての助けをありがとう、みんな!
更新:あなたは本当にメールのチームからのメッセージを持つことはできませんがチームに割り当てられていないものはありますか? –
私は労働者にデフォルトでチームのメッセージを見せてもらいたいが、他のビューを有効にすると割り当てられていないメッセージも表示されるはずです(したがってチームに割り当てます) – Val
さらに調整しましたが、LEFT JOINは基本的に私のためのトリック!助けてくれてありがとう、みんな! – Val