2016-10-16 4 views
1

私はこのSQLの質問に固執しています。それを解決するためのさまざまな方法を試しましたが、私はエラーを受け取り続けています。 2000年。2000年以来アカウントを持っていない患者を削除するためのSQL

これらはテーブルです:

Patient (PatientID, FamilyName, GivenName, Address, Suburb, State, PostCode) 

Doctor (ProviderNo, Name) 

Item (ItemNo, Description, Fee) 

Account (AccountNo, ProviderNo, PatientID, Date) 

AccountLine (AccountNo, ItemNo) 

私が書いたコードは次のとおりです。

DELETE PatientID, Item.Date 
FROM dtoohey.Patient 
WHERE AccountLine.AccountNo = Account.AccountNo 
AND Account.PatientID = Patient.PatientID 
AND Date <=(TO_DATE('31-DEC-1999','DD-MON-YYYY'); 

誰かが助けてくださいことはできますか?

+1

特に、コードがSQL ServerでもMySQLでも互換性がないため、互換性のないデータベースタグを削除しました。 –

+0

アカウントテーブルに患者の外部キーがありますか? –

+0

PatientIDは、患者のAccountテーブルの外部キーです – PikaJovi

答えて

3

私はnot existsを使用してこれを表現します:

delete patient p 
    where not exists (select 1 
         from account a 
         where a.PatientID = p.PatientID and 
          a.date >= date '2000-01-01' 
        ); 

私は日付の定数については、この使用してOracle構文を表明しました。他のほとんどのデータベースはANSI標準のYYYY-MM-DD形式をサポートしていますので、dateというキーワードを削除するだけで済みます。

+0

SELECTコマンドの後には何を意味しますか? – PikaJovi

+0

'date '2000-01-01'' **は**日付リテラル(' date'キーワードを含む)のANSI SQLフォーマットです。オラクル固有のものではありません –

+0

@PikaJovi - ここの1は単なるプレースホルダです。 PatientID、5または100のような何でもかまいません。exists節は、一部のレコードが – kbball

0

また、にしてこれを行うことができます:患者 WHERE FROM

DELETE * 
FROM Patient 
WHERE Patient.PatientID IN 
(SELECT PatientID 
FROM Account 
WHERE Account.date >= 10-01-2016) 
0

DELETE PatientIDはAccount.PatientID = Patient.PatientID口座から1を選択し、Account.date> =「(EXISTS 2000-12- 31 ')

関連する問題