2

使用可能なすべてのキーを取得しようとしています。つまり、返されたキー(return_dateがnullではない)、キーが失われていない(lost_key = false)、および以前にレンタルされたことがないキー(idがnull)を意味します。ただし、これを実行すると、0回の受信が発生します。id条件を削除すると、以前にレンタルされたキーのみが取得され、keyActivityテーブルにないすべてのキーが無視されます。誰かが私が間違っていることを知っていますか?

SELECT a.key_id, a.drawer_num
FROM 
    keys AS a 
    left outer JOIN keyActivity AS b 
        ON a.key_id = b.key_id
WHERE 
    return_date is not null 
    and lost_key =false
    and id is null;

ここに画像の説明を入力してください

使用したソリューション:

SELECT a.key_id, a.drawer_num
FROM keys AS a LEFT JOIN keyActivity AS b ON a.key_id = b.key_id
WHERE (b.return_date is not null 
and b.lost_key =false) 
OR b.id is null;
4

1 に答える 1

1

idは両方のテーブルのフィールドである可能性があり、その場合、条件id is nullは誤ってのとして解釈され、id結果keysセットNULLは空になります。

フルネームで呼び出すと、つまりb.id以前のを除外したい場合に機能するはずですkeyActivity

ANDただし、前の条件を括弧で囲んで接続し、最後の条件をで接続したい場合もあると思いますOR。これは、キーが返されている限り、前のキーアクティビティで問題がないためです。

SELECT * FROM keys AS a LEFT OUTER JOIN keyActivity AS b ON a.key_id = b.key_id
  WHERE (b.return_date IS NOT NULL OR b.id IS NULL) AND a.lost_key = false;

編集:私は条件を再調整し、店員が鍵を渡す前に鍵を紛失した場合もキャッチしました。

于 2013-01-13T03:21:01.083 に答える