PL/SQLでUPDATEする際、別のテーブルからの条件も付加し更新を行いたいのですが、可能でしょうか?
教えて下さい。
どうぞよろしくお願い致します。

テーブル名T_NAMEのSEI='1'の時以下のロジック処理を行いたいのです。

UPDATE T_ADRS
SET DLT_FLG = '1'
, USER_ID = inUSER_ID
, TNMT_ID = inCOMP_ID
, UPD_DT = SYSDATE
WHERE RTRIM(ADR_CD) = RTRIM(strADR_CD)
AND RTRIM(DATA_SY) = RTRIM(strDATA_SY)
AND RTRIM(IMP_NO ) = RTRIM(strIMP_NO );

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんばんわ


ちょっと自信がないのですが・・・

質問の内容は、
1)必ずT_NAMEとリンクさせて、T_NAMEのSEIが'1'のデータのみ更新対象とする
2)T_NAMEに存在しないデータも更新対象とするが、T_NAMEのSEIが'1'のデータは
特別に更新項目が追加される
のどちら(又は、どちらでもない?)でしょうか?

まず1)の場合ですが、
UPDATE T_ADRS TBL_A
SET DLT_FLG = '1'
WHERE ...(中略)...
AND EXISTS(
 SELECT 1 FROM T_NAME TBL_N
 WHERE TBL_A.ID = TBL_N.ID
 AND TBL_N.SEI = '1'
 AND ROWNUM = 1)
とすれば実現できるかと。
EXISTSと言うのは「存在する」と言う意味で、
EXISTSに続く括弧内のSELECT文に対応するデータが存在するかどうかを判定してくれます。
で、実際のSELECT文の内容ですが、更新対象のテーブル「T_ADRS」と
条件判断様のテーブル「T_NAME」をリンクさせて、条件文を記述しています。
このSELECT文に該当するデータが存在する場合はEXISTSがTRUEになりますので、
更新対象となり、該当するデータが存在しない場合は更新対象になりません。

次に2)の方ですが、
UPDATE T_ADRS TBL_A
SET DLT_FLG = (
 SELECT DECODE( TBL_N.ID, '1', '1', TBL_A.DLT_FLG)
 FROM T_NAME TBL_N
 WHERE TBL_A.ID = TBL_N.ID(+)
 AND ROWNUM = 1 )
WHERE ...(後略)
で大丈夫だったと思います・・・
これは、SELECT文の内容をDLT_FLGにSETする・・・と言うSQLですが、
SELECTの内容はT_NAMEを外部結合しています。
これによって、T_NAMEが存在しない場合はそのままT_ADRSのDLT_FLGを使い、
存在しかつSETが'1'の場合は'1'で更新します。
※存在するがSEIが'1'では無い場合はDLT_FLGが使われます。

余り良いSQLでは無いかも知れませんが、
取りあえず思いついたのはこれくらいです。

長々と書いてしまいましたが、
的外れの回答だったら、すんません
    • good
    • 0
この回答へのお礼

まだ、試していませんが頑張ってやってみます。
迅速なアドバイスありがとうございました。

お礼日時:2002/02/25 09:36

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qテーブル入れ子にしたらNNではダメ?

赤い背景画像を使ったHTMLにテーブルを3個入れ子で載せました。
下のテーブルのセルに白色、中のテーブルのセル色にグレー、一番上のテーブルのセルに白色を指定しました。

そこへラジオボタンをつけたのですが、本来、枠がない丸いボタンのところに赤の枠ができてしまいます。
IEでは問題ないのですが、NN4.7で確認したらこうなっていました。

デザインを変えずに回避する方法があったら教えてください。
また、NN6.*~だったらOKということはありますか?

Aベストアンサー

こんにちは!

<input type="radio" name="address" value="menber" checked style="background-color:#FFFFFF;">

と style="background-color:#FFFFFF;" を追加してください。

NN6は分かりませんが4.7と7で確認しました。

Mac 側は確認していません・・。

QVSAM,QSAM,BSAM,BPAM,BDAM

データセット編成とアクセス法に関してですが、それぞれ、どのようなデータセットとして使われることが多いですか?データを入れるとか…、プログラムを入れるとか…。

Aベストアンサー

メインフレームの世界ですね。私が使い慣れているのは
NEC製ですが、共通項が多いので説明します。

> BPAMがプログラムライブラリーか?
簡単にはその通りです。
プログラムだけではないですが、順編成のサブファイル
を複数格納可能な編成方式のファイル(ライブラリ)を
意味します。

> VSAMがDB?QSAM,BSAMがテープとディスクか?
VSAMはDBの原型みたいなものです。
カタログ/VSAMファイル本体以外にジャーナルを持ち、
COMMIT,ROLLBACK制御も可能です。
QSAM,BSAMはVSAMアクセスの動作方式のことで
す(プログラム中では意識する必要ありません)。

> BDAMはディスクか???
これもアクセス方式ですね。目的レコードの相対アドレ
スを指定してアクセス(READ/WRITE)する方式です。

> DBやJCL、ファイルを入れる場合はBPAMか?
DBは別物です。JCL、プログラム等が格納されるファイル
の形式(編成)がBPAMです。

> ボリュームという言葉があるけれど、データ編成で考えてはいけないのか?
ボリュームとは例えば磁気テープ1本、磁気ディスク1
スピンドルといった補助記録媒体の単位です。
→ 磁気ディスクには1ボリューム中に複数の異なる
  データ編成のファイルを作成可能です。

> ボリュームはどのようにできているのか?
VTOCおよびデータ領域です。

> ボリュームより大きいものはなんと言うのか?
通常ボリュームグループという概念があります。
→ この概念が無いとマルチボリュームファイルは作成
  できませんから・・・。

> 機能は、ちゃんと読んでみます。データ編成は他にもありそうな…。
NECの場合だと、相対編成、乱編成、待機結合編成なんて
のもありますね。

> ファイル編成とデータセット編成は同じことだよな…。???
大体において同じ意味で使用しているケースが多いです。

私の会社ではまだメインフレーム現役です・・・。

メインフレームの世界ですね。私が使い慣れているのは
NEC製ですが、共通項が多いので説明します。

> BPAMがプログラムライブラリーか?
簡単にはその通りです。
プログラムだけではないですが、順編成のサブファイル
を複数格納可能な編成方式のファイル(ライブラリ)を
意味します。

> VSAMがDB?QSAM,BSAMがテープとディスクか?
VSAMはDBの原型みたいなものです。
カタログ/VSAMファイル本体以外にジャーナルを持ち、
COMMIT,ROLLBACK制御も可能です。
QSAM,BSAM...続きを読む

QNN4.7 テーブルの背景を表示出来ますか?

至急教えて欲しいのですが、ネットスケープ4.7でhtmlを確認中ですが。
テーブルへ背景を埋め込むと表示されないようです。
この現象は、NN4.7では無理なのでしょうか?
どなたか助けてくださいm(_ _)m

Aベストアンサー

NN4.7では <table bgcolor="~"> や <table background="~"> は正式にサポートされています。
(Win. Mac. 共にNN4から正式サポート)

但し、NNの仕様でテーブルの各セル内が背景以外何もない場合は背景が表示されません。

おそらく、背景が表示されていない部分は、文字も画像も入れていないのではありませんか?

そのときには、各空白のセルに相当するソース部位に「&nbsp;」(&は実際には半角です)を記述しておきます。
「&nbsp;」(&は実際には半角です)は、空白を表す特殊な記号で、ブラウザには表示されません。

Q複数テーブルが絡む複雑なUPDATE文の書き方

こんばんは

次のような2つのテーブルを参照して条件を指定するUPDATE文はどのように書けばよいのでしょうか?

Parentsテーブル

ID, Name, HasChild, AGE
1, Tanaka, True, 20
2, Yamamoto, False, 25
3, Suzuki, True, 30
4, Kobayashi, True, 20
5, Sato, True, 25

Children
ID, Name, ParentID, Male, Flag
1, Taro, 1, True, 0
2, Hanako, 1, False, 0
3, Ichiro, 3, True, 0
4, Jiro, 4, True, 0
5, Subroh, 5, True, 0

やりたいこと:20歳の親を持つ男の子のみにフラグを付ける

Parentテーブルで、親が子持ち(HasChild = True)で、年齢が20歳の人だけを対象に
Childrenテーブルでその親の子(Parents.ID = Children.ParentID)が男の子(Male = True)だった場合、
Flag を 0 から 1 に変更する

実行結果

Children
ID, Name, ParentID, Male, Flag
1, Taro, 1, True, 1
2, Hanako, 1, False, 0
3, Ichiro, 3, True, 0
4, Jiro, 4, True, 1
5, Subroh, 5, True, 0

結果は、Tanaka TaroくんとKobayashi Jiroくんのフラグが1になります。

複数テーブルのSELECTについては勉強してきましたが、こういうパターンは初めてでわかりません。エクセルVBAから.mdbファイルを扱う時に使います。Microsoft.Jet.OLEDB.4.0のADODB.Connectionを使っています。

よろしくお願いします。

こんばんは

次のような2つのテーブルを参照して条件を指定するUPDATE文はどのように書けばよいのでしょうか?

Parentsテーブル

ID, Name, HasChild, AGE
1, Tanaka, True, 20
2, Yamamoto, False, 25
3, Suzuki, True, 30
4, Kobayashi, True, 20
5, Sato, True, 25

Children
ID, Name, ParentID, Male, Flag
1, Taro, 1, True, 0
2, Hanako, 1, False, 0
3, Ichiro, 3, True, 0
4, Jiro, 4, True, 0
5, Subroh, 5, True, 0

やりたいこと:20歳の親を持つ男の子のみにフラグを付ける

Parentテーブルで、親が...続きを読む

Aベストアンサー

ExcelからAccessのテーブルを更新するということならば
以下のような感じですか。Accessで更新クエリを作ってみれば
わかりますが。

Sub test()
Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim strSQL As String
Dim strPath As String

strSQL = "UPDATE Childrenテーブル INNER JOIN Parentsテーブル " & _
"ON Childrenテーブル.ParentID = Parentsテーブル.ID SET Childrenテーブル.Flag = 1 " & _
"WHERE ([Parentsテーブル]![HasChild])=True AND ([Parentsテーブル]![AGE])=20 AND ([Childrenテーブル]![Male])=True"
strPath = ThisWorkbook.Path & "\sample.mdb"
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath

Set cmd.ActiveConnection = cn

With cmd
    .CommandText = strSQL
    .CommandType = adCmdText
    .Prepared = True
End With

cmd.Execute
Set cmd = Nothing
cn.Close: Set cn = Nothing
End Sub

なお、SQL文の中身は

UPDATE Childrenテーブル INNER JOIN Parentsテーブル ON Childrenテーブル.ParentID = Parentsテーブル.ID SET Childrenテーブル.Flag = 1
WHERE ([Parentsテーブル]![HasChild])=True AND ([Parentsテーブル]![AGE])=20 AND ([Childrenテーブル]![Male])=True;

ですので、コード表が乱れていたら訂正してください。

ExcelからAccessのテーブルを更新するということならば
以下のような感じですか。Accessで更新クエリを作ってみれば
わかりますが。

Sub test()
Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim strSQL As String
Dim strPath As String

strSQL = "UPDATE Childrenテーブル INNER JOIN Parentsテーブル " & _
"ON Childrenテーブル.ParentID = Parentsテーブル.ID SET Childrenテーブル.Flag = 1 " & _
"WHERE ([Parentsテーブル]![HasChild])=True AND ([Pa...続きを読む

QIE6/NN7.1のテーブルのheight="100%"

テーブルの高さの指定 height="100%" なんですが、
IE6とNN7.1で100%で表示されません。

下記の記述に間違いはありますでしょうか?
もしかしたら初歩的な問題なんでしょうか?


ちなみにIE5.5 MacのIE5.2では表示されました。
困っています。
宜しくお願いいたします。

ーーーーーーーーーーーーーー
<table border="0" cellspacing="0" cellpadding="0" height="100%">
<tr>
<td valign="top">上</td>
</tr>
<tr>
<td valign="bottom">下</td>
</tr>
</table>
ーーーーーーーーーーーーー

Aベストアンサー

HTML4.01の規格(仕様)では、tableに使えるアトリビュートは、summary、align、widthです。
heightが有効になるほうが特殊だと思ったほうがよいとおもいます

QInsert+Update=???

ここに書くべきかも悩んでいますが、質問です。

プログラムでInsert処理とUpdate処理を意識せずに実行するメソッドを作ったのですが、その名称にはどんな名称(英語)が良いでしょうか…

ちなみにメソッドの内部では
テーブルのキーでQuery、無ければInsert、有ればUpdate、と言う感じです。

ちなみに、その他「参照」や「削除」の動作が有るので
これらの意味合いを含まないような名前にしたいので
AccessやExecute等は避けたいんです。

くだらない質問で申し訳ないですがよろしくお願いします。

Aベストアンサー

よかった。まだ閉じてなかったんですね。
#1を書いたatonです。
あれからつらつら考えてたんですが,こっち↓のほうがいいかもしれません。

Set
Put
Let

何れも,プログラミング言語で代入文に使われるような動詞です。

##2のymmasayanさんのお答えに似た,
# UpdateOrInsert というのは,
#私も真っ先に思いついたんですが,
#(処理内容を表現するという意味ではこれが一番正しい)
#さすがに長いだろうと思ってました。

QNNでテーブルの枠線(BORDER)の設定は?

NN6です。
BORDERを使用したいのですが、NNではうまくいきません。
<TABLE>タグにあてはめるとだめだときいたので、TDにあてはめようとしているのですが…。

HEAD内で
TDにBORDER-STYLE="SOLID; BORDER-COLOR:GRAY;"
としました。これをTD CLASS=***
としているのですが、一向に線は出てきません。
どのように直せばいいのでしょうか?

Aベストアンサー

とりあえずダブルクォーテーションは不要なので削除しましょう。

BORDER-STYLE=SOLID; BORDER-COLOR:GRAY;

それでも出なかったらボーダーの太さも明記しておきましょう。

BORDER-STYLE=SOLID; BORDER-COLOR:GRAY;BORDER-WIDTH:1pt;

QIf 参加賞 = 1 Then '←

Access2003 Windows-xpを使っています。
フォーム上に、複数のテキストボックスがあり、そこにコードを書いてあるのですが、、、
現在、「参加賞」のテキストボックスに「1」を入力したとき(If 参加賞 = 1 Then)
というようになっていますが、ここを"「0以外の数値」を入力した時"というコードにしたいのですが、どのように書いたらよいのでしょうか?
すみませんが、どなたか教えてください。
宜しくお願い致します。
-----------------------------------------
Private Sub 参加賞_AfterUpdate()

If 参加賞 = 1 Then

'他を0にする
i参加賞 = 0
F賞 = 0
E賞 = 0
D賞 = 0
i提案賞 = 0
i努力賞 = 0
idea賞 = 0

End If
End Sub
---------------------------

Aベストアンサー

0以外なら
If 参加賞 <>1

0より大きい数値なら
If 参加賞 >0

で、いかがですか?

QIE(5.5)とNN(4.7)のフォントサイズについて。

フォントサイズがデフォルトのままだと、IE(5.5)とNN(4.7)とではフォントサイズが違うのです。
IEの方でフォントサイズを「小」にするとNNと丁度良いサイズになるので、
IEでアクセスしたときには強制的にフォントサイズを「小」に変更することなど出来ませんでしょうか?
CSSで「12px」とかにしたんですけど、やはりIEでサイズが「中」になっていると
微妙にサイズが違ってしまうのです。
また、テーブル内のフォントのサイズも同じように変更したいのでNNに対しては融通が利かないのです。
なにとぞお知恵をお貸しくださいませm(_ _)m

Aベストアンサー

これはJavaScriptとの併用である程度解決つきます。
ブラウザによって使用するCSSファイル(この場合は外部ファイルにします。拡張子『.css』)を用意し、<head>~</head>タグ内にブラウザの判別のスクリプトを書く形です。

IE用とNN用で別々のCSSを用意する事によって、かなり近い状態で表示されるはずです(それでもWindows/Mac、他のバージョンを考えると完全に一致させる事は至難の技ですが・・・)。

JavaScriptでのブラウザ判別については、ここの『JavaScirpt』の方で見つかったので、そのリンクを。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=186603

QSQLiteで「UPDATE table1 SET cnt+=1」のようなことがしたいのですがどう書けばいいですか?

adobe AirにてSQLiteを使っています。

ある値を加算してやりたいのですがmySQLと同じ書き方ではできませんでした。下の2つの書き方はいずれもだめでした。
UPDATE table1 SET cnt+=1
UPDATE table1 SET cnt=cnt+1

どのように書けばいいのでしょうか?
よろしくおねがいします。

Aベストアンサー

SQLの基本的な構文であり、MySQLとは違うといったことはありません。

update 表名 set 列名=列名+1

>mySQLと同じ書き方ではできませんでした。下の2つの書き方はいずれもだめでした。

「だめ」とは、具体的にどうなるのですか?
文法エラー?
更新しているはずなのに、値が変わっていない?


人気Q&Aランキング