したがって、2つの表があります。簡単にするために、2つの列を1つずつ表示し、もう1つは他の列のみを表示しますが、データはもっとたくさんあります。oracle SQLでのselectの更新での問題
okが、そう、テーブルは次のようになります。
_________________________________
| table 1 |
+---------------------------------+
| gas_deu est_pag |
+---------------------------------+
| 56857 (null) |
| 60857 (null) |
| 80857 (null) |
+---------------------------------+
______________________
| table 2 |
+----------------------+
| gas_pag |
+----------------------+
| 56857 |
| 21000 |
| 75857 |
+----------------------+
表1と表2は
は何をここで起こっていることは、以下の基本的である(両方のテーブルに同じ名前)id_edi、およびnr_depを使用して参加することができます:
表1には、誰かに所有されている番号であるgas_deuがあります。
表2のgas_pagは、gas_deu-gas_pagがgas_deuが完全に支払われた場合は0(または負)、部分的に支払われた場合は正の数を示すことを意味します。
また、表1の一部の行は表2ではgas_deuが全く支払われていないことを意味していません。私がする必要がどのような
は、次のと表1に更新est_pagです:
gas_deu-gas_pag < = 0の場合(債務が支払われる)gas_deu-gas_pag>は(部分的に0支払ったならば、1
にest_pag値を更新行が表1であるが、表2に、それが全く支払われていなかったではないので、est_pag値は3
になり、私は多くのことを試してみました、そして私が意味する場合)、その後2
にest_pag値を更新このための更新のコードがたくさんあるので、テーブルには多くの列があるので、混乱してしまうだけなので、試したコードを投稿することはできません。
私は主に、アップデートのセットとアップデートの場所でselectサブクエリを使用しようとしました。それらのすべてが常に私に単一の行のエラーを与える、私はこれが複数の値を返すために起こることを知っているが、どうすればよいだろうか?私は、クエリの値が1つしか得られず、負債ステータスに一致する行のみを更新する方法は見当たりません。
ケースを論理的に選択してくれましたが、いつでも複数の行が返されます(gas_deu-gas_pagの場合< = 0、次に1つのエスト_ページ終了)。少なくとも1つの値があれば、始まりますが、同じ行以上の問題が発生します)
何か助けや提案をいただければ幸いです。 stackoverflowで、まだそれを動作させることができません
編集:テーブル1は、更新後にどのように見えるはずです
| table 1 |
+---------------------------------+
| gas_deu est_pag |
+---------------------------------+
| 56857 1 |
| 60857 2 |
| 80857 2 |
+---------------------------------+
アップデート2:
update table1
set est_pag=(select (case when (select min((case when gasto.gas_deu-
pago.gas_pag<=0 then 0 else null end))
from table2 pago full outer join gasto_comun_pruebaestpago gasto on
pago.nr_dep=gasto.nr_dep
where gasto.nr_dep=pago.nr_dep and gasto.id_edi=pago.id_edi)=0 then 1 else
null end)
from table2 pago full outer join gasto_comun_pruebaestpago gasto on
pago.nr_dep=gasto.nr_dep
where gasto.nr_dep=pago.nr_dep and gasto.id_edi=pago.id_edi)
where est_pag is null;
これは私が試した多くのコードのいずれかです。これはすべての値を1に変更します。これはmin()のbacauseであり、そこには1行だけが出力され、0であればcaseでチェックされ、0であれば0がすべて1になります。 min()を指定しないとselectは必要な処理を行いますが、 '1行のサブクエリが複数の行を返します'というエラーが再び返されます。
あなたのコードですか?テーブル構造はどこですか?サンプルの入力と出力はどこですか? – Eric
この時点では大きなメッセージなのでコードを投稿していませんでした。カラム名は膨大で、テーブル構造について言及しましたが、両方のテーブルが両方のテーブルに同じ名前のid_ediとnr_depによって結合されています 私は何を得るかを示す表を追加します。 – DMage
支払った借金と部分的に支払った借金の差額を知ることはできません。 – Eric