3

私はDelphi7、BDE、Interbase(テスト)、Oracle(本番)を使用しています。

2つのテーブル(マスター、レスポンス)があります

Responsesテーブルをステップスルーし、そのMaster_Idフィールドを使用してMasterテーブル(id)でレコードを検索し、Masterテーブルの日付フィールドをResponsesテーブルの日付フィールドで更新する必要があります。

これはSQLで実行できますか、それとも実際に2つのTTableまたはTQueriesを作成して、各レコードをステップスルーする必要がありますか?

例:

2つのテーブルを開きます(Table1、Table2)

with Table1 do
begin
 first;
 while not EOF do
 begin
  //get master_id field
  //locate in id field in table 2
  //edit record in table 2
  next;
 end;
end;  

ありがとう

4

2 に答える 2

2

Chrisのクエリにわずかな変更を加え、where句をスローして、更新が必要なレコードのみを選択します。それ以外の場合は、残りの日付がNULLに設定されます

UPDATE Master m
SET 
    m.date = (SELECT r.date FROM Reponses r WHERE r.master_id = m.id) 
WHERE m.id IN (SELECT master_id FROM Responses)

どの列がどのテーブルからのものか混乱を避けるためにエイリアスを使用するように更新されました。UPDATE構文はデータベースごとに異なるため、これは既製ではなく、コピーして貼り付けることができるクエリです。UPDATEステートメント構文のJOINについては、データベースのSQLリファレンスを参照する必要がある場合があります。

同じマスターエントリに複数の応答がある場合

UPDATE Master m 
SET      m.date = (
    SELECT MAX(r.date) FROM Reponses r WHERE r.master_id = m.id)  
WHERE m.id IN (SELECT master_id FROM Responses) 

私はMAX()を使用しましたが、ビジネスに適したものなら何でも使用できます。もう一度、SQLを理解するために時間を費やしてください。そのほとんど数日の努力。Oracleを使用している場合は、PLSQLの完全なリファレンスを入手してください

于 2011-02-08T18:16:40.800 に答える
0

このSQLを試してください(状況に合わせて名前を変更してください)

UPDATEマスターmSETdate =(SELECT date FROM Responses WHERE id = m.id)

于 2011-02-08T18:09:57.920 に答える