初歩的な質問かもしれませんが・・・
SQL*Plusで
SELECT * FROM AAA
WHERE BBB = TO_DATE('96-03-01','YY-MM-DD')
を実行したのですが 引っ掛かってくれません
テーブルAAAのBBBと言う項目はDATE型で定義されています
もちろんその項目が'96-03-01'もあります
どうすればいいでしょうか?
よろしくお願いします
お二方 レスありがとうございます
・・・・ただどっちも出来なかったんです(ToT)
何がいけないんでしょうか?
ども、謎の宇宙人です。
> ・・・・ただどっちも出来なかったんです(ToT)
>
> 何がいけないんでしょうか?
日付のデフォルト書式設定が違うかもしれないので、明示的に
SELECT * FROM AAA
WHERE TRUNC(BBB) = TO_DATE('96-03-01','YY-MM-DD')
または、木場氏の方法でしたら
SELECT * FROM AAA
WHERE BBB >= TO_DATE('96-03-01','YY-MM-DD')
AND BBB < TO_DATE('96-03-01','YY-MM-DD') + 1
としてみたらどうでしょうか?
ども、謎の宇宙人です。
横から失礼します。
わたしがよく使うのは
SELECT * FROM AAA
WHERE TRUNC(BBB) = '96-03-01'
なんですが、これってだめなんですかね。
確かに、INDEXは使われなくなりますが、
もともとINDEXを貼ってない項目なら
そんなに変わらないと思うのですが。。。
では。。。
> SQL*Plusで
>
> SELECT * FROM AAA
> WHERE BBB = TO_DATE('96-03-01','YY-MM-DD')
>
> を実行したのですが 引っ掛かってくれません
>
> テーブルAAAのBBBと言う項目はDATE型で定義されています
> もちろんその項目が'96-03-01'もあります
> どうすればいいでしょうか?
木場です。
SELECT * FROM AAA
WHERE BBB >= TO_DATE('96-03-01') AND BBB < TO_DATE('96-03-01') + 1
でいかがでしょう。
ちなみに,
http://www.niji.or.jp/home/j8takagi/oracle/enjoy_date1.html
は私が Oracle の DATE 型データの取り扱い方をまとめたものです。
参考になれば幸いです。
こんにちは。
オラクルのテーブルにデータを更新しに行く際に、キーが存在したら、
上書きをし、キーが存在しなかったらレコードを追加するというSQL文
は有りますでしょうか?
ご存じの方いらっしゃいましたら、教えていただけませんでしょうか。
宜しくお願いいたします。
ども、謎の宇宙人です。
> オラクルのテーブルにデータを更新しに行く際に、キーが存在したら、
> 上書きをし、キーが存在しなかったらレコードを追加するというSQL文
> は有りますでしょうか?
>
1回で済ませることは不可能です。
あったらいいな〜と思ったことは多々ありますが、、、
方法はいろいろあると思いますが、SQL文だけでやるとすれば、
1.存在するレコードを更新
2.存在しないレコードを追加
の2段階で実現できるのではないでしょうか。
またはPL/SQLを使用してもいいと思います。
では。。。
はじめまして。最近ASPをはじめたばかりで、本当に度素人です。すでに作られていたASPの中にわからないSELECT文があったので教えてください。
"SELECT * From [テーブル名] WHERE RTRIM(NEWSNO)="&NO です。
WHERE以降のところが分かりません。
教えてくださーい。
> はじめまして。最近ASPをはじめたばかりで、本当に度素人です。すでに作られていたASPの中にわからないSELECT文があったので教えてください。
> "SELECT * From [テーブル名] WHERE RTRIM(NEWSNO)="&NO です。
> WHERE以降のところが分かりません。
> 教えてくださーい。
ども、謎の宇宙人です。
私はまだOracleしか触ったことがないので、違ってるかもしれませんが、
RTRIM()は値の右側の空白(多分半角スペースだけ)を切り捨てる関数です。
このSQLの場合、あるテーブルのNEWSNOという項目の右側(というか後ろ)のスペースを取り除いた値と&NO(ある値、おそらく入力値、パラメータなど)が一致するレコードを検索するという意味になると思われ
では。。。
> > はじめまして。最近ASPをはじめたばかりで、本当に度素人です。すでに作られていたASPの中にわからないSELECT文があったので教えてください。
> > "SELECT * From [テーブル名] WHERE RTRIM(NEWSNO)="&NO です。
> > WHERE以降のところが分かりません。
> > 教えてくださーい。
>
> ども、謎の宇宙人です。
> 私はまだOracleしか触ったことがないので、違ってるかもしれませんが、
> RTRIM()は値の右側の空白(多分半角スペースだけ)を切り捨てる関数です。
> このSQLの場合、あるテーブルのNEWSNOという項目の右側(というか後ろ)のスペースを取り除いた値と&NO(ある値、おそらく入力値、パラメータなど)が一致するレコードを検索するという意味になると思われ
>
> では。。。
ありがとうございました。(^o^)丿そういうことだったのね・・フムフム
現在、SQL Server 2000について調査を行っています。
GUIツールのクエリ アナライザでは、SQLステートメントや
T-SQL、ストアドプロシージャなどを実行することができます。
そこでお聞きしたいことがあるのですが、クエリ アナライザで
実行することができない(制限がある)SQLステートメントは
あるのでしょうか。
masterデータベースの削除ができない、というようにクエリ
アナライザを使わなくても実現不可能なこと以外で「これこれ
系のSQLは実行できない」というような情報をお持ちの方が
いらっしゃいましたら、お教え願えませんでしょうか。
(もちろん「何でもOK!!」という情報でも結構です)
どうかよろしくお願い致します。
以前に、投稿させて頂いた時と同様に、今回も
パフォーマンスのコトで、悩んでいます。
下記SQLが、どうしてもタイムアウトしてしまいます。
単純に、良いSQLを教えて頂けても嬉しいのですが、
どこが悪いのかご指摘頂ければ、幸いです。
================================================================
SELECT 企業ID,会社名,担当者部署名,ユーザ名,住所1,住所2,
ビル名,担当者名,不可期限,郵便番号,電話番号,会社名フリガナ
FROM 企業台帳,ユーザリスト
WHERE ユーザリスト.アカウント = 企業台帳.アカウント
AND (企業ID IN
(
(SELECT 企業ID
FROM subTARGET a,
(SELECT サブターゲット登録番号,MAX(増減速カウント) カウント FROM subTARGET GROUP BY サブターゲット登録番号) b
WHERE (サービスコード IN (1, 9, 4, 2, 49, 50, 3, 32, 7, 5, 54, 6, 8, 31, 15,
21, 16, 26, 20, 10, 11, 12, 13, 14, 47, 18, 17, 19, 33, 34, 35, 36, 37, 46, 48,
51, 52, 53, 99, 22, 30, 24, 23, 25, 27, 28, 38, 39, 98)
AND (
(a.サブターゲット登録番号 = b.サブターゲット登録番号 AND a.増減速カウント = b.カウント
AND (
(a.確度コード=1 AND a.TargetCode=1)
OR (
(a.顧客番号 IS NOT null AND (a.顧客番号<>''))
AND NOT (a.確度コード=1 AND a.TargetCode=5)
)
)
)
OR (確度コード IN (10,20,30) AND TargetCode=1)
OR (確度コード=1 AND TargetCode=5)
)
)
)
UNION
(SELECT 企業ID
FROM dc_subTARGET c,
(SELECT dc_サブターゲット登録番号,MAX(増減速カウント) カウント FROM dc_subTARGET GROUP BY dc_サブターゲット登録番号) d
WHERE (サービスコード IN (1, 2, 3, 4, 5)
AND (
(c.dc_サブターゲット登録番号 = d.dc_サブターゲット登録番号 AND c.増減速カウント = d.カウント
AND (
(c.確度コード=1 AND c.TargetCode=1)
OR (
(c.顧客番号 IS NOT null AND (c.顧客番号<>''))
AND NOT (c.確度コード=1 AND c.TargetCode=5)
)
)
)
OR (確度コード IN (10,20,30) AND TargetCode=1) OR (確度コード=1 AND TargetCode=5)
)
)
)
)
)
AND 不可期限 IS null
ORDER BY 会社名フリガナ
================================================================
このSQLは、WEB上で使用します。
WEB上で選択された条件ごとに、違うSQLを作成しています。
内容としては、
『subTARGET』『dc_subTARGET』の二つのテーブルを
参照する条件を指定して『企業ID』を取得し
『企業台帳』テーブルの情報を取得しようというものです。
何かアドバイス頂ければと思います。
宜しくご指摘下さいますよう、お願い致します。
ども、謎の宇宙人です。
ほぼ以前の状態に戻っているようですね。
subTargetとdc_subTarget似たようなので、
とりあえずsubTargetの条件にだけ絞りこんで話を進めましょう。
私の予想では条件は企業IDが
subTargetテーブルの下記の条件に
該当する企業IDのレコードだと思うのですが。。。
<条件> a and (b or c or d)
a.サービスコードが(1,9,4,2…)である
b.確度コード IN (10,20,30) AND TargetCode=1
c.確度コード=1 AND TargetCode=5
d.同じサブターゲット登録番号の中で増減速カウントが最大かつ
((確度コード=1 AND TargetCode=1) OR
(顧客番号 IS NOT null AND
NOT (a.確度コード=1 AND a.TargetCode=5
)
増減速カウントの最大が関係するのはdのときだけかな〜?
仮にそうだとすると
subTargetテーブルから企業IDを取得する部分はこんな感じですか。
こんな複雑な条件なら↑に書いたような仕様というか文章の説明はないの?
あると話が早いんだけど。。。
SELECT 企業ID
FROM
subTARGET a
WHERE
サービスコード IN (1, 9, 4, 2, 49, 50, 3, 32, 7, 5, 54, 6, 8, 31, 15, 21, 16, 26, 20, 10, 11, 12, 13, 14, 47, 18, 17, 19, 33, 34, 35, 36, 37, 46, 48, 51, 52, 53, 99, 22, 30, 24, 23, 25, 27, 28, 38, 39, 98)
AND
((a.増減速カウント =
(SELECT MAX(増減速カウント) カウント
FROM subTARGET
WHERE サブターゲット登録番号 = a.サブターゲット登録番号
GROUP BY サブターゲット登録番号)
AND
((a.確度コード=1 AND a.TargetCode=1) OR (a.顧客番号 IS NOT null AND NOT (a.確度コード=1 AND a.TargetCode=5)))
)
OR
(確度コード IN (10,20,30) AND TargetCode=1)
OR
(確度コード=1 AND TargetCode=5)
)
まずはこれを試してみて
条件が違ってるようなら、それなりの文章で呈示してくださいね。
間違ったSQL文からは本来の仕様が読み取れませんので。。。
では。。。
いつもお世話になっております。さくらです。
さて、SQLの仕様を説明したい所なんですが、仕様書も
ないし、上手く説明出来る自信がないんですが・・・(汗)
> <条件> a and (b or c or d)
> a.サービスコードが(1,9,4,2…)である
> b.確度コード IN (10,20,30) AND TargetCode=1
> c.確度コード=1 AND TargetCode=5
> d.同じサブターゲット登録番号の中で増減速カウントが最大かつ
> ((確度コード=1 AND TargetCode=1) OR
> (顧客番号 IS NOT null AND
> NOT (a.確度コード=1 AND a.TargetCode=5
> )
>
> 増減速カウントの最大が関係するのはdのときだけかな〜?
まず、提示して頂いた<条件>は、大体あってます。
(私が初めから文章にしていれば、こんな手間かけさせずに
済んだんですよね。ゴメンなさい(>、<))
『企業台帳』の『企業ID』を取得する為に
『subTARGET』や『dc_subTARGET』を条件に指定しています。
条件は下記のものがランダムで加わります。
1.サービスコード IN (1,9,4・・・・)
2.(確度コード=1 AND TargetCode=1) OR
(顧客番号 IS NOT NULL AND 顧客番号<>'') AND NOT (確度コード=1 AND TargetCode=5)
3.確度コード IN (10,20・・・) AND TargetCode=1)
4.確度コード=1 AND TargetCode=5
※1のみが選択された場合はそのままですが、同時に2,3,4のどれか一つでも
選択された場合は、2,3,4全ての条件に、1がかかります。
■例:サービスコード IN (1,9,4) AND
((確度コード IN (10,20) AND TargetCode=1) OR (確度コード=1 AND TargetCode=5))
※2の条件が指定された場合のみ、『増減速カウント』の指定が必要になります。
SELECT サブターゲット登録番号,MAX(増減速カウント) カウント
FROM subTARGET
GROUP BY サブターゲット登録番号
今は、PGの方でフラグを立てて、↑コレがFROM句に指定されるようにしています。
ただし、『増減速カウント』は『subTARGET』や『dc_subTARGET』のデータを
更新する度に、1加算されるようなものなので、
今回、ご提示頂いたSQL文のように、WHERE句に指定してしまうと、
『増減速カウント』が1か2か3か・・・というものは、全て引っかかってきて
しまうのではないかと、思うのですが、私の勘違いでしょうか???
この程度の質問しか出来なくて、申し訳なく思いますが
また、何かアドバイスを頂ければと思います。
切実に、宜しくお願い致します・・・
ども、謎の宇宙人です。
あ〜、また、やっちゃったよ(^^;
条件間違ってました。
> ただし、『増減速カウント』は『subTARGET』や『dc_subTARGET』のデータを
> 更新する度に、1加算されるようなものなので、
> 今回、ご提示頂いたSQL文のように、WHERE句に指定してしまうと、
> 『増減速カウント』が1か2か3か・・・というものは、全て引っかかってきて
> しまうのではないかと、思うのですが、私の勘違いでしょうか???
>
確かに今のままではおっしゃる通りです。
2の条件のところはサブターゲット登録番号も一致していないとおかしなことになりますね。こう変えてみたらどうでしょう?
修正前
((a.増減速カウント =
(SELECT MAX(増減速カウント) カウント
FROM subTARGET
WHERE サブターゲット登録番号 = a.サブターゲット登録番号
GROUP BY サブターゲット登録番号)
AND
((a.確度コード=1 AND a.TargetCode=1) OR (a.顧客番号 IS NOT null AND NOT (a.確度コード=1 AND a.TargetCode=5)))
)
修正後
(((a.サブターゲット登録番号, a.増減速カウント) =
(SELECT サブターゲット登録番号, MAX(増減速カウント) カウント
FROM subTARGET
WHERE サブターゲット登録番号 = a.サブターゲット登録番号
GROUP BY サブターゲット登録番号)
AND
((a.確度コード=1 AND a.TargetCode=1) OR (a.顧客番号 IS NOT null AND NOT (a.確度コード=1 AND a.TargetCode=5)))
)
時間があったら、試してみてくださいな。
ちなみに、FROM句とWHERE句、どちらに指定するのも条件はかわりませんよ。
基本的に私はどっちかと言うとWHERE句を使いますが、FROM句に指定する場合は、SELECTリストに必要な場合だけと決めています。勝手に。。。(笑)
では。。。
本当に何度もお世話になります。さくらです。
> 修正後
> (((a.サブターゲット登録番号, a.増減速カウント) =
> (SELECT サブターゲット登録番号, MAX(増減速カウント) カウント
> FROM subTARGET
> WHERE サブターゲット登録番号 = a.サブターゲット登録番号
> GROUP BY サブターゲット登録番号)
↑ここ。
こんな風に、二つのカラムをセットにして引っ張って来れるなんて
知りませんでした(>、<)
でも、実行してみると、ココがエラーみたいなんですが・・・(汗)
二つのカラムの指定を、一つに変更すると、上手くいきました。
まだ詳しく調べてないのですが、コピペじゃダメってこと
ですかね(^^;
> ちなみに、FROM句とWHERE句、どちらに指定するのも条件はかわりませんよ。
変わらないんですか?!
何となく、FROM句は、そうゆう集合。
言ってしまえば、VIEWやワークテーブルみたいなものを
一時的に作成しているイメージでした。
なのでWHEREで作成したら、時間がかかるような気がして
いました。
って言うか、指定出来るコトすら知らなかったんですが…(汗)
本当に何から何度も、申し訳ありませんが
宜しければもう少し、力を貸して頂ければと思います。。。
ども、謎の宇宙人です。
いつもエラーになるようなSQLばかりで申し訳ない。。。
エラーの内容を教えていただけると、
原因も掴みやすいのですが。。。
予想では、ORA-01427辺りかな?
カラムを複数並べたときは'='を使うとエラーになります。
しかし、それは副問合せで複数行が選択されたときなので、
今回の場合は最大値なので、1行しか選択されないと思うのですが。。。
あとは、カッコが閉じてないとか。。。
予想で話をしてもあまり意味がないので、とりあえず、エラー内容を
教えてください。
では。。。
申し訳ないです・・・
私の『増減速カウント』の説明があやふやだったのが
原因だと思います。
> 予想では、ORA-01427辺りかな?
まず、コレなんですが、私が使っているのがSQLServerでして…
Oracleじゃないんです(>、<)←今更・・・
で、実行しようとすると、構文チェックで引っかかるみたいで
実行すら出来ません。
ちなみに書き直したSQLは、こんなです。
================================================================================
SELECT 企業ID FROM subTARGET a
WHERE
サービスコード IN (1, 9, 4, 2, 49, 50, 3, 32, 7, 5, 54, 6, 8, 31, 15, 21,
16, 26, 20, 10, 11, 12, 13, 14, 47, 18, 17, 19, 33, 34, 35, 36, 37, 46,
48, 51, 52, 53, 99, 22, 30, 24, 23, 25, 27, 28, 38, 39, 98)
AND
(((a.サブターゲット登録番号, a.増減速カウント)=
(SELECT サブターゲット登録番号, MAX(増減速カウント) カウント
FROM subTARGET
WHERE サブターゲット登録番号 = a.サブターゲット登録番号
GROUP BY サブターゲット登録番号)
AND
((a.確度コード=1 AND a.TargetCode=1) OR (a.顧客番号 IS NOT null AND NOT (a.確度コード=1 AND a.TargetCode=5)))
)
OR
(確度コード IN (10,20,30) AND TargetCode=1)
OR
(確度コード=1 AND TargetCode=5)
)
================================================================================
> 今回の場合は最大値なので、1行しか選択されないと思うのですが。。。
コレなんですが、1行じゃありません。たぶん
#(((a.サブターゲット登録番号, a.増減速カウント) =
# (SELECT サブターゲット登録番号, MAX(増減速カウント) カウント
# FROM subTARGET
# WHERE サブターゲット登録番号 = a.サブターゲット登録番号
# GROUP BY サブターゲット登録番号)
このSQLを実行すると、サブターゲット登録番号の数分だけ
増減速カウントが返ってきます。
『サブターゲット登録番号』『増減速カウント』
−−−−−
1,1
1,2
1,3
2,1
3,1
3,2
↑中身はこんな感じです。
この中の『1,3』『2,1』『3,2』の行を取得して、その中でさらに
他の条件で検索がしたいのです。
しかも、この『増減速カウント』で絞り込みたいのが、
================================================================================
((a.確度コード=1 AND a.TargetCode=1)
OR (a.顧客番号 IS NOT null AND NOT (a.確度コード=1 AND a.TargetCode=5)))
================================================================================
だけなんですよね・・・
何か、私の説明が足りないばかりに、ご迷惑をおかけしちゃって
申し訳ないです・・・
どもどもども、謎の宇宙人です。
> 申し訳ないです・・・
> 私の『増減速カウント』の説明があやふやだったのが
> 原因だと思います。
>
> > 予想では、ORA-01427辺りかな?
> まず、コレなんですが、私が使っているのがSQLServerでして…
> Oracleじゃないんです(>、<)←今更・・・
てっきり、ORACLEかと思っていました。。。
早とちり、というより、ORACLEしか知らないもので。。。
> で、実行しようとすると、構文チェックで引っかかるみたいで
> 実行すら出来ません。
構文が引っかかるなら、WHERE句の最大値の副問合せを
FROM句に戻しましょう。
SELECT 企業ID
FROM subTARGET a,
(SELECT サブターゲット登録番号,MAX(増減速カウント) カウント FROM subTARGET GROUP BY サブターゲット登録番号) b
WHERE
サービスコード IN (1, 9, 4, 2, 49, 50, 3, 32, 7, 5, 54, 6, 8, 31,
15, 21, 16, 26, 20, 10, 11, 12, 13, 14, 47, 18, 17, 19, 33, 34,
35, 36, 37, 46, 48, 51, 52, 53, 99, 22, 30, 24, 23, 25, 27, 28,
38, 39, 98)
AND
(
(a.サブターゲット登録番号 = b.サブターゲット登録番号 AND
a.増減速カウント = b.カウント AND
((a.確度コード=1 AND a.TargetCode=1) OR (a.顧客番号 IS NOT null AND NOT (a.確度コード=1 AND a.TargetCode=5))))
OR
(確度コード IN (10,20,30) AND TargetCode=1)
OR
(確度コード=1 AND TargetCode=5)
)
これでどう?
> 何か、私の説明が足りないばかりに、ご迷惑をおかけしちゃって
> 申し訳ないです・・・
いえいえ、わたしも勉強になりますし、
ほとんど、自己満足です。(笑)
この問題をクリアしないことには、夜も眠れません。
もう少しです。がんばりましょう!
こんにちわ。
お世話になりっぱなしの、さくらです(汗)
#このままではツリーが右端に消えてしまいそうです(^^;
#でも、違うトコでレスすると、その上に出ちゃうみたいで
#見難いんですよね・・・
> てっきり、ORACLEかと思っていました。。。
> 早とちり、というより、ORACLEしか知らないもので。。。
大して変わらないです。
時々、Oracleで使ってたモノが使えないコトも
ありますが、何とかなってます(^^;
> 構文が引っかかるなら、WHERE句の最大値の副問合せを
> FROM句に戻しましょう。
(中略)
> これでどう?
ダメでした(T、T)
構文エラーにはならなくなりましたが、20分以上経っても
結果が返ってきません・・・
> この問題をクリアしないことには、夜も眠れません。
> もう少しです。がんばりましょう!
ありがとございます(>▽<)
検索の条件が追加される度に、泣きそうな思いで修正して
きましたが、今回の『増減速カウント』に対応するように
修正したら、もう、何が何だか・・・(T^T)
ちなみに、条件を分割して検索をしてみた所、負荷がかかっている
下の【条件1】と他の条件を組合せた時であるコトが分かりました。
==============================================================
【条件1:FROMに『増減速カウント』での絞り込み付き】
(a.確度コード=1 AND a.TargetCode=1)
OR ((a.顧客番号 IS NOT null AND (a.顧客番号<>''))
AND NOT (a.確度コード=1 AND a.TargetCode=5)
【条件2】
(確度コード IN (10,20,30) AND TargetCode=1)
【条件3】
(確度コード=1 AND TargetCode=5)
【条件4】
サービスコード IN (1,2,3・・・・)
==============================================================
他の条件はつけないで、【条件1】と【条件2】もしくは
【条件1】と【条件3】を設定しただけで、すごく負荷がかかります。
さらに、【条件4】を、全ての条件に対応させたりしたら…(汗)
やっぱり、【条件1】の負荷が大きいのでしょうか?
でも、他にどうしていいのだか・・・(T△T)
ども、謎の宇宙人です。
かなり、雲行きが怪しくなってきましたね。。。
次の手を考えなくては。。。(汗)
とりあえず全部分割して、
【条件4】と【条件1】だけ、
【条件4】と【条件2】だけ、
【条件4】と【条件3】だけ、
とした場合のレスポンスを確認してください。
ORを使うとかなり、効率が悪くなるようなので、次の対処方法としては
条件を分割してUNIONで結合したら、どうだろう?
WHERE 企業ID IN
(
SELECT 企業ID
FROM
subTARGET a,
(SELECT 最大値 〜) b
WHERE 条件4 AND 条件1
UNION
SELECT 企業ID FROM subTARGET
WHERE 条件4 AND 条件2
UNION
SELECT 企業ID FROM subTARGET
WHERE 条件4 AND 条件3
)
これでダメなら、もうお手上げかも。。。(泣
お世話になっております。さくらです。
> とりあえず全部分割して、
> 【条件4】と【条件1】だけ、
> 【条件4】と【条件2】だけ、
> 【条件4】と【条件3】だけ、
> とした場合のレスポンスを確認してください。
> ORを使うとかなり、効率が悪くなるようなので、次の対処方法としては
> 条件を分割してUNIONで結合したら、どうだろう?
(中略)
> これでダメなら、もうお手上げかも。。。(泣
さ・・・30秒(T▽T)
30秒で結果が返ってきました!!
今まで2時間かかっても終わらなかったのに・・・
現段階では直接実行しただけなので、プログラムと組ませて
みないとまだ何とも言えませんし、
実行したSQLで返ってきた結果が、本当に正しいかどうかも
完全に確認できていないのですが、
今度の今度の今度こそ、大丈夫な気がします!!(>▽<)b
私は『UNION』は効率悪いというイメージがあって、あまり
アテにしてなかったんですが(^^;
『OR』のがずっと、効率悪かったんですね・・・
気にしていた『IN』も、そこまでの負担ではなかったようです。
今回、自分が思ってるよりも、細かい所でいろいろな決まりや
同じSQL一つでも、他の書き方もあるんだというコトを学びました。
最後までお付き合い頂きました、謎の宇宙人様には、大変お世話に
なってしまい、ご迷惑をおかけしました。
本当に、ありがとうございました!!
・・・いや、また、来るかもしれませんが(死)
ども、謎の宇宙人です。
ヤッタネ♪(ホッ
途中で投げ出さずに最後までがんばってよかった。
条件も理論上はあってると思われ
あとの確認作業はしっかり頼みますよ。
ぜひ、また来てください。
(わたしは管理者じゃないけど、ケケケ
では。
謎の宇宙人様。
長い間、本当にお世話になりました。
最終的に、プログラムと組ませて、条件を組替えて、
上手く動作するようになりました。
本当に感激です(涙がほろり ←実話。
何かもう、嬉しくって嬉しくって
バカみたいに御機嫌だったりします♪
本当に最後まで、ありがとうございました\(≧▽≦)/
WHERE区に指定する条件の順番について、気になったの
どなたかご教授下さい。
例えば『テーブルの結合』は、
最初>(例:WHERE a.ID=b.ID AND a.ABC=1)
に指定した方がいいのでしょうか?
私は今まで、
最後>(例 WHERE a.ABC=1 AND a.ID=b.ID)
にしていたのですが、最初にした方が、
ちゃんと調査はしていないのですが、
結果を返すまでの時間が短かったような気がしました。
そんな風に、条件を指定する順番って重要なんでしょうか?
初歩的なコトなのかもしれませんが
宜しくお願い致します。
ども、謎の宇宙人です。
テーブルのレコード件数、索引にもよりますが、
条件の順番だけでなく、FROM句の順番も影響します。
これはパフォーマンス・チューニングに関することで、
決して初歩的なことではありません。
詳しくはマニュアルを参照してください。
「Oracle8i パフォーマンスのための設計およびチューニング」
http://otndnld.oracle.co.jp/document/products/iserver/oracle8i/817/generic/developer/J00921.pdf
ども、謎の宇宙人です。
すみません。リンク間違ってました。。。
というか、このサイトはユーザー登録が必要でした。
http://otn.oracle.co.jp/membership/index.html
ここからユーザー登録(無料)すれば、マニュアルなど
いろいろダウンロードできますよ。
> すみません。リンク間違ってました。。。
> というか、このサイトはユーザー登録が必要でした。
・・・じゃあ、私が見れたモノは一体・・・(汗)
> ここからユーザー登録(無料)すれば、マニュアルなど
> いろいろダウンロードできますよ。
わざわざ、ありがとうございます(*^▽^*)
頑張って、もっと勉強したいと思います♪
こんにちわ。さくらです。
> ども、謎の宇宙人です。
いつもお世話になっています(^^;
> テーブルのレコード件数、索引にもよりますが、
> 条件の順番だけでなく、FROM句の順番も影響します。
> これはパフォーマンス・チューニングに関することで、
> 決して初歩的なことではありません。
FROM句まで、影響するなんて知りませんでした。
知らないコトだらけで恥ずかしいです・・・
本当、大変勉強になりました、
ありがとうございました♪
何年かぶりに開発に就いて、SQL文を見ましたが、さっぱり昔のことは忘れてしまいました。 『FETCH』 『INCLUDE』 って… 何でしたっけ? できたら、教えて下さいな。
少し、図々しいお願いかもしれませんが
宜しくお願いします。
下記のSQLだと、検索の数が増えるとタイムアウトを
してしまいます。
このSQL文のパフォーマンスを上げる方法は
ないでしょうか?
=========================================================
SELECT 企業ID,会社名,担当者部署名,ユーザ名,住所1,住所2,
ビル名,担当者名,不可期限,郵便番号,電話番号,会社名フリガナ
FROM 企業台帳,ユーザリスト
WHERE ユーザリスト.アカウント = 企業台帳.アカウント
AND 企業台帳.アカウント = 'ide'
AND ((企業ID IN
(SELECT DISTINCT 企業ID
FROM subTARGET a,
(SELECT サブターゲット登録番号,MAX(増減速カウント) カウント FROM subTARGET GROUP BY サブターゲット登録番号) b
WHERE (a.確度コード=1 AND a.TargetCode=1)
OR (((a.顧客番号 IS NOT null) AND (a.顧客番号<>'')) AND NOT (a.確度コード=1 AND a.TargetCode=5)
AND a.サブターゲット登録番号 = b.サブターゲット登録番号
AND a.増減速カウント = b.カウント)) )
OR (企業ID IN
(SELECT DISTINCT 企業ID
FROM dc_subTARGET c,
(SELECT dc_サブターゲット登録番号,MAX(増減速カウント) カウント FROM dc_subTARGET GROUP BY dc_サブターゲット登録番号) d
WHERE (c.確度コード=1 AND c.TargetCode=1)
OR (((c.顧客番号 IS NOT null) AND (c.顧客番号<>'')) AND NOT (c.確度コード=1 AND c.TargetCode=5)
AND c.dc_サブターゲット登録番号 = d.dc_サブターゲット登録番号
AND c.増減速カウント = d.カウント) )))
ORDER BY 会社名フリガナ
=========================================================
(仮のカラムをあてるのも大変だったので、そのまま使用してしまいました。)
宜しければ、何かアドバイスを頂ければと思います。
自己レスです。
とりあえず、まだタイムアウトのテストはしていませんが
下記のように修正してみました。
=========================================================
SELECT 企業ID,会社名,担当者部署名,ユーザ名,住所1,住所2,
ビル名,担当者名,不可期限,郵便番号,電話番号,会社名フリガナ
FROM 企業台帳,ユーザリスト
WHERE ユーザリスト.アカウント = 企業台帳.アカウント
AND 企業台帳.アカウント = 'ide'
AND 企業ID IN (
(SELECT DISTINCT 企業ID
FROM subTARGET a,
(SELECT サブターゲット登録番号,MAX(増減速カウント) カウント FROM subTARGET GROUP BY サブターゲット登録番号) b
WHERE ((サービスコード IN (1, 0)) AND (確度コード=1 AND TargetCode=1))
OR ((サービスコード IN (1, 0))
AND (((a.顧客番号 IS NOT null) AND (a.顧客番号<>'')) AND NOT (a.確度コード=1 AND a.TargetCode=5))
AND a.サブターゲット登録番号 = b.サブターゲット登録番号
AND a.増減速カウント = b.カウント
)
)
UNION
(SELECT DISTINCT 企業ID
FROM dc_subTARGET c,
(SELECT dc_サブターゲット登録番号,MAX(増減速カウント) カウント FROM dc_subTARGET GROUP BY dc_サブターゲット登録番号) d
WHERE ((サービスコード IN (0)) AND (c.確度コード=1 AND c.TargetCode=1))
OR ((サービスコード IN (0))
AND (((c.顧客番号 IS NOT null) AND (c.顧客番号<>'')) AND NOT (c.確度コード=1 AND c.TargetCode=5))
AND c.dc_サブターゲット登録番号 = d.dc_サブターゲット登録番号
AND c.増減速カウント = d.カウント
)
)
)
ORDER BY 会社名フリガナ
=========================================================
引き続き、何かアドバイスありましたら
宜しくお願い致します。
ども、謎の宇宙人です。
条件がわかんないんですけど。。。
このSQLがタイムアウトになるのは無理もないとは思います。。。
前回の質問の内容も使っているので、教えた私にも責任の一端があるのかどうか。。。
予想ですがズバリ!これでどうでしょ?
SELECT
企業ID, 会社名, 担当者部署名, ユーザ名, 住所1, 住所2,
ビル名, 担当者名, 不可期限, 郵便番号, 電話番号, 会社名フリガナ
FROM 企業台帳, ユーザリスト
WHERE
ユーザリスト.アカウント = 企業台帳.アカウント
AND 企業台帳.アカウント = 'ide'
AND 企業ID IN
(SELECT 企業ID
FROM subTARGET a,
(SELECT サブターゲット登録番号, MAX(増減速カウント) カウント
FROM subTARGET
GROUP BY サブターゲット登録番号) b
WHERE
a.サブターゲット登録番号 = b.サブターゲット登録番号 AND
サービスコード IN (1, 0)) AND
((a.確度コード=1 AND a.TargetCode=1) OR ((NOT (a.確度コード=1 AND a.TargetCode=5)) AND a.増減速カウント = b.カウント))
UNION
SELECT 企業ID
FROM dc_subTARGET c,
(SELECT dc_サブターゲット登録番号,MAX(増減速カウント) カウント
FROM dc_subTARGET
GROUP BY dc_サブターゲット登録番号) d
WHERE
c.dc_サブターゲット登録番号 = d.dc_サブターゲット登録番号 AND
サービスコード = 0 AND
((c.確度コード=1 AND c.TargetCode=1) OR ((NOT (c.確度コード=1 AND c.TargetCode=5)) AND c.増減速カウント = d.カウント))
)
ORDER BY 会社名フリガナ
というか、これくらいでないと帰ってこないだろう。。。
これでも帰ってくるかどうか。。。
はずしてたら、もう少し詳しい条件を日本語でお願いします。
では。。。
謎の宇宙人様。さくらです。
提示して頂いたSQL文を、条件に合わせて変更、修正
した所、何と、
49分かかっていたものが
12秒で返ってきました!!!!!\(>▽<)/
むちゃくちゃ感激です!!
ありがとうございました!!
『UNION』が遅いって言うのは、『IN』に比べたら
そうでもなかったんですね。。。
どもども、謎の宇宙人です。
エラーでしたか。。。環境が無かったもので
ろくに構文チェックもせずに投稿してしまいました。
適当な返信をしてしまって、スミマセン。。。
エイヤ!って感じでね。仕事では許されないことです。(笑
何はともあれ、上手くいった様でよかった、よかった。
> 謎の宇宙人様。さくらです。
>
> 提示して頂いたSQL文を、条件に合わせて変更、修正
> した所、何と、
>
> 49分かかっていたものが
> 12秒で返ってきました!!!!!\(>▽<)/
>
> むちゃくちゃ感激です!!
> ありがとうございました!!
>
> 『UNION』が遅いって言うのは、『IN』に比べたら
> そうでもなかったんですね。。。
何度もありがとうございます。
とりあえず、そのまま実行するとエラーが出てしまって
まだ試せてないのですが、日本語の説明を加えさせて
頂きたいと思います。
まず、コレは、条件によってSQL文が変わるように
作られています。
ですから、同じ条件はひとまとめにしたいトコなの
ですが、選択された条件につき、条件文を追加して
いっているので、無駄な部分が多いのです。
ですから『サービスコード IN (1, 0)』なんて箇所は
条件によっては、INの条件が、数十個になるコトも
あります。
それから『UNION』はパフォーマンスが悪いという話を
聞いたので、『EXISTS』というものを使おうと試しました
が、ダメでした。
ちなみに、条件は違いますが、同じSQL文の結果が返ってくる
までに49分もかかってしまいました・・・(汗)
引き続き、調査、修正をしていきたいと思います。
また、説明といっても、何を説明していいのかすら
分からないので、この程度の説明しか出来ませんでした。
質問があったら言って頂ければと思います。
宜しくお願い致します。
教えてください。
oracle8iのデータベースが空で、ここにデータを入れたいと思ってます。
データを一括登録するにはどのようにすればよいのでしょうか?
DOSのBatchファイルみたいのを作成し、SQL PLUSに接続してから、そのファイルを実行すれば出来ると聞いたのですがわからなくて・・・。
ども、謎の宇宙人です。
> 教えてください。
>
> oracle8iのデータベースが空で、ここにデータを入れたいと思ってます。
> データを一括登録するにはどのようにすればよいのでしょうか?
> DOSのBatchファイルみたいのを作成し、SQL PLUSに接続してから、そのファイルを実行すれば出来ると聞いたのですがわからなくて・・・。
SQL*Loaderがいいと思いますよ。
データファイルの種類にもよりますけど。。。
SQL*Loaderの使い方はマニュアルを見てください。
では。。。
謎の宇宙人さん、ありがとうございました。
結局、データをSQLファイルで作成し、SQL*PLUSで「@C:\xxxx.sql」と実行しました。
SQL*Loaderは本にはちらっとしか載っていなく、SQLのヘルプにも詳しいことが載っていなかったため諦めてしまいました。
教えていただいたのにすみません&ありがとうございました。
ども、謎の宇宙人です。
> 結局、データをSQLファイルで作成し、SQL*PLUSで「@C:\xxxx.sql」と実行しました。
それで、上手くいったのでしたらその方法で良かったんですよ。
> SQL*Loaderは本にはちらっとしか載っていなく、SQLのヘルプにも詳しいことが載っていなかったため諦めてしまいました。
SQL*Loaderについては下記にドキュメント(マニュアル PDF)がありますので、今後のご参考までに
「Oracle8i ユーティリティ・ガイド」http://otn.oracle.co.jp/document/products/database/oracle8i/o8i_817_general.html
初めて投稿させていただきます。
現在あるSQLで悩んでいるので、教えていただきたいのですが・・・
(環境:ORACLE/SQL*PLUS)
販売表
品番 当年数量 前年数量
-----------------------------
1 100 150
2 200 300
品番マスタ表
品番 有効日付FROM 有効日付TO 単価
---------------------------------------
1 19991001 20010801 100
1 20010802 99999999 150
2 19981001 20000601 200
2 20000602 99999999 250
という2つの表で、マシン日付を基準にして、品番マスタ表の有効日付の
範囲にある単価を取得し、当年数量*単価で当年実績を、マシン日付−1年を基準にして、品番マスタ表の有効日付の範囲にある単価を取得し、前年数量*単価で前年実績を出力する。というSQLを作成したいのですが
教えていただけないでしょうか?
ども、謎の宇宙人と申します。
日付をCHAR(8)でっていうのはあまり好きじゃないのですが、
ま、それは置いといて
現在の単価はこれでどうだろ?
SELECT 品番, 単価 FROM 品番マスタ表
WHERE TO_CHAR(SYSDATE, 'YYYYMMDD')
BETWEEN 有効日付FROM AND 有効日付TO
あとは販売表と結合して、当年実績を計算する。
--当年実績
SELECT A.品番, (A.当年数量*B.単価) AS 当年実績
FROM
販売表 A,
(SELECT 品番, 単価 FROM 品番マスタ表
WHERE TO_CHAR(SYSDATE, 'YYYYMMDD')
BETWEEN 有効日付FROM AND 有効日付TO) B
WHERE A.品番 = B.品番;
前年実績は1年前だからADD_MANTHS()関数でSYSDATE-12ヶ月して、
前年単価を求めて、前年数量とかけるだけだから、やってみてね。
では。。。
早速やってみます。
ありがとうございました。
初めてお邪魔させて頂きます。
かなり、煮詰まってしまって、どなたかアドバイスでもして
頂けたらと思いまして、書き込みさせて頂きました。
やりたいコトなのですが
========================================================
SELECT Aコード,MAX(ZZZ) FROM ABC GROUP BY Aコード
========================================================
↑ココで『Bコード』なる別のモノを取得したいのです。
でも、『GROUP BY』に設定しないと、取得出来ないようなので
困っています。
何か、よい方法はないでしょうか?
宜しくお願い致します。
ども、謎の宇宙人と申します。
もう一つ同じテーブルABCと集計した結果を結合してみては?
SELECT T1.Aコード, T1.最大値, T2.Bコード
FROM
(SELECT Aコード, MAX(ZZZ) AS 最大値 FROM ABC GROUP BY Aコード) T1,
ABC T2
WHERE
T1.Aコード = T2.Aコード
/
こんなんでどうでしょ?
キーはAコードでいいのかな。。。
では。。。
FROM区にSELECT文が書けるなんて
知りませんでした。
おかげで、期待した結果を検索するコトが
出来ました。
本当にありがとうございました!!
DBがOracle8iでPL/SQLを用い、ファイル出力のフォーマットを決めて
出力したいのですがUTL_FILEというパッケージを用いる方法をとるので
しょうか??データディクショナリのUSER_TABLE,DBA_TAB_COLUMNSを用いて、カーソルで持ってきて、最終的に
Drop Table テーブル名;
Create Table テーブル名(
項目名 データ型( サイズ ) ,
項目名 データ型( サイズ ),
項目名 データ型( サイズ )
)
PCTFREE 40 PCTUSED 20 INITRANS 1 MAXTRANS 255
STORAGE(INITIAL 1M NEXT 1M MINEXTENTS 1 MAXEXTENTS 1024
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1) TABLESPACE 表領域名 NOLOGGING;
という感じのファイルを出力したいのですがどうしたらよろしいのでしょうか??
ども、謎の宇宙人です。
確かにPL/SQLでUTL_FILEを用いれば、ファイル出力できますよ。
使い方はマニュアルを参照してください。
「Oracle8i PL/SQLパッケージ・プロシージャリファレンス」
でも、スクリプトを既に存在するテーブルから作成するってのは。。。
この業界ではよくある話なんですかね〜 (-_-;
突然ですが質問です。
SQLからファイルに出力する方法を教えていただきたいのです。
課題が出ているのですがそれだけがわからず困っています。
どなたか教えていただけないでしょうか??お願いします。
> 突然ですが質問です。
> SQLからファイルに出力する方法を教えていただきたいのです。
> 課題が出ているのですがそれだけがわからず困っています。
> どなたか教えていただけないでしょうか??お願いします。
補足です。DBはOracle8iです。宜しくお願いします。
> > 突然ですが質問です。
> > SQLからファイルに出力する方法を教えていただきたいのです。
> > 課題が出ているのですがそれだけがわからず困っています。
> > どなたか教えていただけないでしょうか??お願いします。
>
> 補足です。DBはOracle8iです。宜しくお願いします。
SQL *Plus で
実行したいSQLを実行した後、
コマンド save ファイル名(絶対パス)ではだめですか?
ファイル名があるときは
コマンド save ファイル名 replace で結果を上書きして
ファイルに書き出してくれますよ。
> SQL *Plus で
> 実行したいSQLを実行した後、
> コマンド save ファイル名(絶対パス)ではだめですか?
> ファイル名があるときは
> コマンド save ファイル名 replace で結果を上書きして
> ファイルに書き出してくれますよ。
なぜか結果ではなくて、SQLの実行文が出力されてしまいました。
> コマンド save ファイル名(絶対パス)
のコマンドとはSQLの実行文のことなのですか??
SELECT文で抽出した結果をスプールではなく、データファイルのような形式で出力したいのです。もう一度やってみますが、なにかよい方法があればまた教えていただきたいと思います。
宜しくお願いします。
> > SQL *Plus で
> > 実行したいSQLを実行した後、
> > コマンド save ファイル名(絶対パス)ではだめですか?
> > ファイル名があるときは
> > コマンド save ファイル名 replace で結果を上書きして
> > ファイルに書き出してくれますよ。
>
> なぜか結果ではなくて、SQLの実行文が出力されてしまいました。
> > コマンド save ファイル名(絶対パス)
> のコマンドとはSQLの実行文のことなのですか??
> SELECT文で抽出した結果をスプールではなく、データファイルのような形式で出力したいのです。もう一度やってみますが、なにかよい方法があればまた教えていただきたいと思います。
> 宜しくお願いします。
ごめんなさい、私の勘違いでした。
save コマンドは実行したSQL文をファイルに出力するものでした。
結果をファイルに出力するコマンドは
spool です。
> ごめんなさい、私の勘違いでした。
> save コマンドは実行したSQL文をファイルに出力するものでした。
> 結果をファイルに出力するコマンドは
> spool です。
やはりそうでしたか。
spoolだと
項目名@ 項目名A 項目名B
------------------------------
値@ 値A 値B
↓ ↓ ↓
のような形になりますよね。
それを
値@,値A,値B
↓ ↓ ↓
のように値をカンマで区切るようなファイルフォーマットで
出力したいのですが、手元の資料では限界ですのでアドバイスお願いします。
横から失礼します。謎の宇宙人です。
SQL*Plusであれば、次のようにしてみては?
「SET HEADING OFF」でカラムヘッダーを非表示に、
「SET COLSEP ','」でカラムの区切りをカンマにできますよ。
> 横から失礼します。謎の宇宙人です。
>
> SQL*Plusであれば、次のようにしてみては?
> 「SET HEADING OFF」でカラムヘッダーを非表示に、
> 「SET COLSEP ','」でカラムの区切りをカンマにできますよ。
謎の宇宙人さん、横からありがとうございます!!無事出力できました。
いつもお世話になります。
こばと申します。
早速質問で恐縮なのですが
テーブルA 番号とコードはキー
ーーーーーーーーーーーーーーーーー
番号 コード 名称
0 12AAAA 名称1
1 12AAAA 名称2
2 12AAAA 名称1
0 12BBBB 名称1
1 12BBBB 名称2
というテーブルがあったとき
番号 コード 名称
2 12AAAA 名称1
1 12BBBB 名称2
という風にレコードを引っ張ってくくるSQL文を
書きたいのですが、わかりません。
どなたか、ご存知の方教えていただけませんでしょうか?
おやりになりたいことがイマイチわからないのですが、該当するコードで最大の番号のデータ行を取得するということでしょうか。
こんな感じでどうでしょう。
SELECT CODE, NAME, MAX(NUMBER)
FROM TABLEA
GROUP BY CODE, NAME
早速の返答ありがとうございます。
やりたいことがうまく伝わらずに、ご迷惑をかけてしまいました。
該当するコードで最大の番号のコードと名称を持ってきたいのですが、
> こんな感じでどうでしょう。
>
> SELECT CODE, NAME, MAX(NUMBER)
> FROM TABLEA
> GROUP BY CODE, NAME
この場合だと、
コード(CODE)、名称(NAME)でグループ化されるので、
同一コードで名称が違えば、名称が違う数だけHitしてしまいます。
番号 コード 名称
0 12AAAA 名称1
1 12AAAA 名称2
2 12AAAA 名称1
0 12BBBB 名称1
1 12BBBB 名称2
というテーブルがあったとき
> SELECT CODE, NAME, MAX(NUMBER)
> FROM TABLEA
> GROUP BY CODE, NAME
このSQLを実行すると
番号 コード 名称
1 12AAAA 名称2 ←この行は出したくない
2 12AAAA 名称1
1 12BBBB 名称2
わかりづらくて申し訳ないですが、よろしくお願いします。
> 該当するコードで最大の番号のコードと名称を持ってきたいのですが、
「サブクエリーのネスト」を用いてはいかがでしょうか。
SELECT NUMBER, CODE, NAME FROM TABLEA
WHERE (NUMBER, CODE) IN (
SELECT MAX(NUMBER), CODE FROM TABLEA GROUP BY CODE
)
「サブクエリーのネスト」は,『SQLプログラミング入門』
第7章で説明されています。
> > 該当するコードで最大の番号のコードと名称を持ってきたいのですが、
>
> 「サブクエリーのネスト」を用いてはいかがでしょうか。
>
> SELECT NUMBER, CODE, NAME FROM TABLEA
> WHERE (NUMBER, CODE) IN (
> SELECT MAX(NUMBER), CODE FROM TABLEA GROUP BY CODE
> )
>
> 「サブクエリーのネスト」は,『SQLプログラミング入門』
> 第7章で説明されています。
木場修太郎さん、ありがとうございます。
無事解決しました。
初めて投稿します。
今、ORACLEのViewを作っているのですが、下記の件で
悩んでいます。何か良い解決方法があったら教えて下さい。
<悩みの種>
A,B2つのテーブルの共有項目の都道府県コードで外部結合し
たのですがAテーブルの1レコードに対してBテーブルを外部結
合したいのです。
例えば下記の様なデータであれば
<Aテーブル>
商品番号、型式番号、都道府県コード
--------------------------------------
001 001 01
001 002 02
<Bテーブル>
都道府県コード、都道府県名称
--------------------------------------
01 北海道
02 青 森
:
:
47 沖 縄
<結果>
商品番号、型式番号、都道府県コード、都道府県名称
------------------------------------------------
001 001 01 北海道
001 001 02 青 森
:
:
001 001 47 沖 縄
001 002 01 北海道
001 002 02 青 森
:
:
001 002 47 沖 縄
ども、謎の宇宙人です。
なんか結果から見るとAの1レコードにBの全てのレコードを
結合しているように見えますが、外部結合ではないようですね。
以下のSELECT文を実行してみてください。
SELECT A.商品番号, A.型式番号, B.都道府県コード, B.都道府県名称
FROM A, B
ORDER BY A.商品番号, A.型式番号, B.都道府県コード
以上です。はずしてたらゴメンね
では。。。
謎の宇宙人様
早速のご回答ありがとうございます。
すみません、私の記述に漏れがありました。
(抜け部分を含めて下記に書きました)
何度も申し訳ありませんが、良い方法があったらご教授下さい
<抜けの部分>
AテーブルとBテーブルで都道府県コードが合致するものだけ
はAテーブルの販売額を持ってきて、それ以外の46都道府県
分は販売額にNULLをセットしたいのです。
A,B2つのテーブルの共有項目の都道府県コードで外部結合し
たのですがAテーブルの1レコードに対してBテーブルを外部結
合したいのです。
例えば下記の様なデータであれば
<Aテーブル>
商品番号、型式番号、都道府県コード、販売額
-------------------------------------------
001 001 01 1000
001 002 02 2000
<Bテーブル>
都道府県コード、都道府県名称
--------------------------------------
01 北海道
02 青 森
:
:
47 沖 縄
<結果>
商品番号、型式番号、都道府県コード、都道府県名称、販売額
-------------------------------------------------------
001 001 01 北海道 1000
001 001 02 青 森 NULL
:
:
001 001 47 沖 縄 NULL
001 002 01 北海道 NULL
001 002 02 青 森 2000
:
:
001 002 47 沖 縄 NULL
お教え頂いた方法で実行すると47都道府県全てに同じ販売額
がセットさせれしまうので、該当都道府県コード以外はNull
をセットしたいのですが・・・
> ども、謎の宇宙人です。
> なんか結果から見るとAの1レコードにBの全てのレコードを
> 結合しているように見えますが、外部結合ではないようですね。
> 以下のSELECT文を実行してみてください。
>
> SELECT A.商品番号, A.型式番号, B.都道府県コード, B.都道府県名称
> FROM A, B
> ORDER BY A.商品番号, A.型式番号, B.都道府県コード
>
> 以上です。はずしてたらゴメンね
> では。。。
どもども、謎の宇宙人です。
様だなんて、とんでもない。
まだまだ、わたしだってまだまだ初心者です。
みんなで、知恵を出し合ってがんばっていきましょう。
で、本題ですが、とりあえず、単純なAとBの外部結合ではなさそうですね。
そこで、前回のAとBのを結合したSELECT文をビュー(C)にして、そのビューとAの外部結合にしてみたらどうでしょう。
SELECT
C.商品番号, C.型式番号, C.都道府県コード, C.都道府県名称, A2.販売額
FROM
(SELECT A1.商品番号, A1.型式番号, B.都道府県コード, B.都道府県名称,
FROM A A1, B) C,
A A2,
WHERE C.商品番号 = A2.商品番号(+)
AND C.型式番号 = A2.型式番号(+)
AND C.都道府県コード = A2.都道府県コード(+)
ORDER BY C.商品番号, C.型式番号, C.都道府県コード
こんな感じでいけるかな?
では。。。
謎の宇宙人様
ご回答ありがとうございます。
やはり、Viewを2段階にするしかないですよね
どうにかひとつのViewで出来ないかな思ってい
たのですが・・・無理ですよね
大変、勉強になりました。ありがとうございました。
> どもども、謎の宇宙人です。
>
> 様だなんて、とんでもない。
> まだまだ、わたしだってまだまだ初心者です。
> みんなで、知恵を出し合ってがんばっていきましょう。
>
> で、本題ですが、とりあえず、単純なAとBの外部結合ではなさそうですね。
> そこで、前回のAとBのを結合したSELECT文をビュー(C)にして、そのビューとAの外部結合にしてみたらどうでしょう。
>
> SELECT
> C.商品番号, C.型式番号, C.都道府県コード, C.都道府県名称, A2.販売額
> FROM
> (SELECT A1.商品番号, A1.型式番号, B.都道府県コード, B.都道府県名称,
> FROM A A1, B) C,
> A A2,
> WHERE C.商品番号 = A2.商品番号(+)
> AND C.型式番号 = A2.型式番号(+)
> AND C.都道府県コード = A2.都道府県コード(+)
> ORDER BY C.商品番号, C.型式番号, C.都道府県コード
>
> こんな感じでいけるかな?
> では。。。
木場と申します。
『SQLプログラミング入門』でだいぶ勉強させて
いただいたものです。
Oracle の場合,
SELECT
商品番号, 型式番号, B.都道府県コード, 都道府県名称,
DECODE((A.都道府県コード - B.都道府県コード), 0, 販売額, NULL)
FROM A, B
ORDER BY 商品番号, 型式番号, B.都道府県コード
でいかがでしょうか?
ちなみに,"DECODE" は Oracle 独自の関数ということで,
『SQL・・・』には載ってないようですね。
詳しい使い方は,Oracle の『SQL リファレンスマニュアル』
等でお確かめください。
はじめまして、謎の宇宙人と申します。
目からウロコです。(笑
DECODE()ってこんな使い方もあるんですね。
勉強になりました。
> SELECT
> 商品番号, 型式番号, B.都道府県コード, 都道府県名称,
> DECODE((A.都道府県コード - B.都道府県コード), 0, 販売額, NULL)
> FROM A, B
> ORDER BY 商品番号, 型式番号, B.都道府県コード
>
> でいかがでしょうか?
kehiといいます。
初歩的な質問で恐縮なのですが、テーブルに設定したLengthの合計を知りたいのです。
例えば、TableNameがtest_tblだとして
Attribute | Type | Modifier
-------------+--------------+-------------
seq_no | numeric(6,0) | not null
q_1 | char(2) | default '0'
q_2 | char(2) | default '0'
q_3 | char(2) | default '0'
q_4 | char(1000) | default '0'
といったテーブルがあるとします。
この場合「1012」という値を取得したいのですが、
どのようなSQL文で取得可能でしょうか?
め@804です。
結局のところ、表の定義をみる必要があるので、
どのRDBMSをつかっているかで変わってくるとおもうのですけど。
なにつかってますか?
め様
kehiです。お返事ありがとうございます。
DBはPostgreSQLを使用しています。
他の掲示板でOracleの事例を頂きましたが、
SELECT SUM(data_length - (data_length -
nvl(data_precision,data_length)))
from user_tab_columns
WHERE table_name = 'テーブル名'
との事でした。
PostgreSQLでの方法を現在調べています。
> め@804です。
>
> 結局のところ、表の定義をみる必要があるので、
> どのRDBMSをつかっているかで変わってくるとおもうのですけど。
>
> なにつかってますか?
例えば、以下のような B という表があり、
ID NO CD
1 1 A
1 2 B
1 3 C
1 4 D
2 1 D
3 1 B
3 2 E
3 3 A
3 4 D
指定するコードがCDにすべて含まれるIDについて、
そのコードに対応するNOをすべて足した数字を
昇順に並べて表示したいという事をやりたいのですが、
以下のようなSQLで何とか希望の結果が実現できました。
SELECT BA.ID, Sum(BA.NO) AS NOの合計
FROM B AS BA
WHERE BA.ID IN (SELECT BB.ID FROM B AS BB WHERE BB.CD = 'D'
AND BB.ID IN (SELECT BC.ID FROM B AS BC WHERE BC.CD = 'A'))
AND (BA.CD = 'D' OR BA.CD = 'A')
GROUP BY BA.ID
ORDER BY Sum(BA.NO)
結果
----------------------------------
ID NOの合計
1 5
3 7
ただ、実際には、表の件数やパターン、CDに指定するコードは、
とてつもなく多く、コードが増えるにつれ、
サブクエリーも増えていくイメージになるので、
他にスマートな良い方法がないかと、悩んでおります。
テーブル自体の構造を変える事も吝かではありませんので、
どなたか、識者の方のお知恵をお貸し下さい。
何卒よろしくお願いいたします。
ども、謎の宇宙人です。
こんな感じでどうでしょ?
SELECT ID, SUM(NO) AS NOの合計
FROM
(
SELECT ID, NO FROM B
WHERE CD = 'A'
INTERSECT
SELECT ID, NO FROM B
WHERE CD = 'D'
・
・
・
INTERSECT
SELECT ID, NO FROM B
WHERE CD = 'Z'
)
GROUP BY ID
ORDER BY SUM(NO)
コードが増えたら
INTERSECT
SELECT ID, NO FROM B
WHERE CD = 'hogehoge'
を追加
やってみてください。
結果報告してくれるとうれしいな
では。。。
どもども、謎の宇宙人です。
ウソ教えてしまいました。
悩ませてしまっていたら、ごめんなさい。
修正させてください。
SELECT ID, SUM(NO) AS NOの合計
FROM B
WHERE ID IN
(SELECT ID FROM B
WHERE CD = 'A'
INTERSECT
SELECT ID FROM B
WHERE CD = 'D'
・
・
・
INTERSECT
SELECT ID FROM B
WHERE CD = 'Z'
)
AND CD IN ('A', 'D'…,'Z')
GROUP BY ID
ORDER BY SUM(NO)
これでどうでしょ?
はじめまして、なぞの使者といいます。
ある項目で&の含んだ項目をlike 等であいまい検索したいのですが、
必ず1クッション問い掛けてきます。
(例) Select * From NRPMA WHERE PART_NO = '%&L75%'
例のように検索すると
l75に対して値を入力:
旧 1: Select * From NRPMA WHERE PART_NO = '%&L75%'
新 1: Select * From NRPMA WHERE PART_NO = '%%'
というメッセージがでます。この 「l75に対して値を入力: 」という
メッセージを出さずに目的の項目を抽出する方法がどうしても分かり
ません。どうか知っておられる方御教授をお願いします。
どうも、謎の宇宙人と申します。
メッセージからして、SQL*Plusと思われ、SQL文からして、ORACLEですよね?
SQL*Plusでは&は後に続く文字をバインド変数として判断しています。
バインド変数になり得る文字が続かないように次のようにしてみてはどうでしょう。
Select * From NRPMA WHERE PART_NO LIKE '%&'||'L75%'
こんなんでいいのか?自信なし。。。
>
> Select * From NRPMA WHERE PART_NO LIKE '%&'||'L75%'
>
> こんなんでいいのか?自信なし。。。
なぞの使者です。これで実行してみたらうまくいきました。
とても感謝します、有り難うございました。
SQLでお伺いしたいのですが、
先頭行からn行までが欲しい時のSQLの記述の仕方をご存知の方がいましたら教えてくださいませんか。
> SQLでお伺いしたいのですが、
> 先頭行からn行までが欲しい時のSQLの記述の仕方をご存知の方がいましたら教えてくださいませんか。
うろ覚えですが、「TOP」というのを使えば先頭から何行って指定
できたと記憶しています。
SELECT * FROM TABLE1 TOP 10
かな?
Access2000を使用しています。
test.mdbがオープンされているかチェックするには、どうすれば良いのでしょうか?
スマートな方法があれば、教えていただけないでしょうか。
こんにちわ。Accessはあまり詳しくないですが。
> Access2000を使用しています。
> test.mdbがオープンされているかチェックするには、どうすれば良いのでしょうか?
> スマートな方法があれば、教えていただけないでしょうか。
プログラムからだと、排他の占有モードでひらこうとして、成功するか、しなか、で知るとか。
データベースがオープンされるとロックのためのファイル(*.LDB)ができるので、それをチェックするとか、そのくらいしか考えつきません。うーん。
SQLサーバー7.0で、ストアドプロシージャを作成中なのですが
テーブル名を変数で扱いたいと思っているのですが、うまくいきません。
おはようございます。
> SQLサーバー7.0で、ストアドプロシージャを作成中なのですが
> テーブル名を変数で扱いたいと思っているのですが、うまくいきません。
うーん、どう「うまくいかないのか」詳細をかかないと誰も答えられないとおもいますよ。環境ややり方をあなたは知っているかもしれませんが、掲示板を見る人はだれも知らないし。
列の途中の部分(たとえば列Aの3カラム目から6カラム目)でソートした結果を同一レイアウトのテーブルに挿入したいのですが、可能でしょうか?
め@804です。
> 列の途中の部分(たとえば列Aの3カラム目から6カラム目)でソートした結果を同一レイアウトのテーブルに挿入したいのですが、可能でしょうか?
やりたいことが今ひとつ見えませんが、列とカラムは同じ意味だし。
またソートした結果をテーブルに挿入しても、RDBだと、通常、行の並びは不定なので、意味がないし。
も少し情報もとむ。具体例をだすとか。
sql = "select M2SHO_HINBAN,M2SHO_TANABAN,M2SHO_BUN_CD,T2ZAI_ZAI_SU、M2IYDCSHO,T2YDCZAI"
sql = sql & "where M2SHO_SHO_CD" = "T2ZAI_SHO_CD and 2ZAI_NG_FLG" = 0 = " & Text1.Text & " '"
これのなにが間違ってるのですか?教えてください
ども、謎の宇宙人です。
> sql = "select M2SHO_HINBAN,M2SHO_TANABAN,M2SHO_BUN_CD,T2ZAI_ZAI_SU、M2IYDCSHO,T2YDCZAI"
> sql = sql & "where M2SHO_SHO_CD" = "T2ZAI_SHO_CD and 2ZAI_NG_FLG" = 0 = " & Text1.Text & " '"
>
> これのなにが間違ってるのですか?教えてください
@FROM句がありませんね。
Aカンマが1箇所だけ全角ですね。
とりあえず、以上
担当者ごと、日付ごとにデータがあるのですが、そのデータを
月々に、担当者ごとに合計したものを出したいのです
たとえば...
担当者コード 年月日 値
-------------------------------
001 20010715 2
001 20010716 3
001 20010815 4
001 20010816 5
002 20010715 11
002 20010716 12
002 20010815 13
002 20010815 14
を...
担当者コード 年月 値
------------------------------
001 200107 5
001 200108 9
002 200107 23
002 200108 27
という風に求めたいのです
タイトルにも書きましたが日付は8桁の数値で扱っています
もしかしたらこれがネック??なのでしょうか?
年月(数値の上6桁)でうまくグループ化できるのでしょうか??
ORACLE8.0.5です
SQL文の基本的なところしかわからない私なので
どなたか知恵を拝借できないでしょうか
よろしくお願いします
ども、謎の宇宙人です。
> 担当者ごと、日付ごとにデータがあるのですが、そのデータを
> 月々に、担当者ごとに合計したものを出したいのです
> タイトルにも書きましたが日付は8桁の数値で扱っています
> もしかしたらこれがネック??なのでしょうか?
> 年月(数値の上6桁)でうまくグループ化できるのでしょうか??
単に数値の上6桁なら、関数で
SUBSTR(TO_CHAR(年月日, 'FM99999999'), 1, 6) AS 年月
これで変換できると思いますよ。
確かに、日付はDATE型にした方がいいとは思いますけど、
パフォーマンスにも影響しますし、、、
では。
こんにちは。
SQL文で少々お聞きしたいことがあります。
以下のようなDBがあるとします。
テーブル名 AAAA
DATA | DATA2
00001 | QQQQQQ
00002 | ZZZZZZ
00003 | YYYYYY
(カラムDATAはchar(5))
ここで、新規にローを追加したいのですが次のような法則になります。
DATAの最大値を取得し、それに1を加えた値を入れる。
このときDATAは必ず5桁で無ければならない。
ようするに、上記のようなDB上だと次に入れるDATAの値は00004になるわけです。
ここで、SQL文だけで最大値を取得し、1を加えるやり方がどうしても見つかりません。
どなたかご存知の方がおられましたらご教授願いませんでしょうか?
宜しくお願い致します。
ども、謎の宇宙人です。
> 以下のようなDBがあるとします。
>
> テーブル名 AAAA
> DATA | DATA2
> 00001 | QQQQQQ
> 00002 | ZZZZZZ
> 00003 | YYYYYY
> (カラムDATAはchar(5))
>
> ここで、新規にローを追加したいのですが次のような法則になります。
>
> DATAの最大値を取得し、それに1を加えた値を入れる。
> このときDATAは必ず5桁で無ければならない。
>
> ようするに、上記のようなDB上だと次に入れるDATAの値は00004になるわけです。
> ここで、SQL文だけで最大値を取得し、1を加えるやり方がどうしても見つかりません。
> どなたかご存知の方がおられましたらご教授願いませんでしょうか?
> 宜しくお願い致します。
1回に1行追加するだけであれば、
INSERT INTO AAAA (DATA, DATA2)
SELECT
TO_CHAR(MAX(TO_NUMBER(DATA))+1, 'FM00000'), 'XXXXXX'
FROM AAAA;
こんなんでどうでしょ。
> ども、謎の宇宙人です。
>
>
> 1回に1行追加するだけであれば、
>
> INSERT INTO AAAA (DATA, DATA2)
> SELECT
> TO_CHAR(MAX(TO_NUMBER(DATA))+1, 'FM00000'), 'XXXXXX'
> FROM AAAA;
>
> こんなんでどうでしょ。
早速のご返事有難うございます。
なるほど・・・。そういうやり方があったんですか。
でも、残念なことにDBがSybaseなので使えない関数が多くて出来ませんでした。
もう一度Sybaseのマニュアルを読んでみて同じような関数が無いか調べてみます。
ども、謎の宇宙人です。
> でも、残念なことにDBがSybaseなので使えない関数が多くて出来ませんでした。
> もう一度Sybaseのマニュアルを読んでみて同じような関数が無いか調べてみます。
すみません。わたしの頭の中はORACLEしかなかったもので。。。
もしわかったら、Sybaseでの方法をUPしてください。
頑張ってください。
どうもtonitaです。
> すみません。わたしの頭の中はORACLEしかなかったもので。。。
いえいえ、何も言わなかった私の方こそ済みませんでした。
> もしわかったら、Sybaseでの方法をUPしてください。
> 頑張ってください。
頑張って調べては見たのですが、なかなか見つからなかったので仕方なく
テーブルロックすることにしました。
デッドロックなど少々心配なところもありましたが、何とかクリア出来ました。
begin tran
lock table AAAA in exclusive mode wait ← 他のコネクションんら参照できなくなります。
select max(DATA) from AAAA
InDATA = インクリメント処理
INSERT INTO AAAA(DATA, DATA2) values('InDATA', 'XXXXXX')
commit tran
てな感じです。
教えてください。
表1と表2があります。
共にA列とB列とC列をキーとして、表1にない組み合わせを
表2から抽出する場合、どのようにSQLを書けば良いのですか?
め@804です。
> 教えてください。
>
> 表1と表2があります。
> 共にA列とB列とC列をキーとして、表1にない組み合わせを
> 表2から抽出する場合、どのようにSQLを書けば良いのですか?
OracleならMINUS、SQL ServerならNOT EXISTですかね。
SELECT A,B,C FROM 表1 MINUS A,B,C FROM 表2;
> OracleならMINUS、SQL ServerならNOT EXISTですかね。
>
> SELECT A,B,C FROM 表1 MINUS A,B,C FROM 表2;
お手数おかけしました。
もっと精進いたしますのでm(_ _)m
初心者です。どなたかご教示願います
自分はphp4でデータベース検索ができるものを作ろうとしているのですが、Mssqlで、テーブルの列名、データ型、そのデータ型に許されているオペレータなどの情報を取得する方法あるのですか?
Postgreでは下記方法で取得できるみたいですがMssqlで下記に変わる方法は無いのでしょうか?
テーブルに関する情報の取得
SELECT a.attnum,t.typename,a.attlen,a.attypmod,a.attnotnull,a.atthasdef FROM
pg_class c, pg_attribute a, pg_type t WHERE c.relname='テーブル名'
AND a.attnum>0 AND a.attrelid=c.oid AND a.atttypid=t.oid
ODER BY attnum;
型に関するオペレータ情報の取得
SELECT o.oprname AS op,t1.typname AS left_arg,t2.typname AS
right_arg,t0.typname AS result,obj_description(p.oid) as
description
FROM pg_proc p,pg_type t0,pg_type t1,pg_type t2,pg_operator o
WHERE t1.typname='$typname'
AND p.prorettype=t0.oid AND RegprocToOid(o.oprcode)=p.oid
AND p.pronargs=2 AND o.oprleft=t1.oid AND o.oprright=t2.oid
AND t0.typname='bool'AND t1.typname=t2.typname
以上 Mssql に変わる方法をご教示願います。
め@804です。徐々にDBにリハビリ中です。
> 初心者です。どなたかご教示願います
>
> 自分はphp4でデータベース検索ができるものを作ろうとしているのですが、Mssqlで、テーブルの列名、データ型、そのデータ型に許されているオペレータなどの情報を取得する方法あるのですか?
>
> Postgreでは下記方法で取得できるみたいですがMssqlで下記に変わる方法は無いのでしょうか?
基本的にはRDBMSはシステムに関わるものも、RDBの表として管理されているので、マニュアルをみればのっているでしょうよ。
ところでMssqlって、MSのSQLのこと?
MySQLのタイプミスなら、以下のところを参照すればわかります。
http://www.mysql.gr.jp/jpdoc/3.22/manual.ja_Reference.html#SHOW
SQL初心者です。よろしくお願いします。
sum関数を使用してデータの合計を出す場合、
合計を出す項目がCHARで、値がスペースだと
エラーになってしまいます。
オラクルの場合は、TO_NUMBERで数値変換が出来ると
説明書には書いてあったのですが、
使用するのは、SQL Server と Accessです。
何かTO_NUMBERの変わりになるものか、
又は、スペースでも合計してくれるsumに変わるものを教えてください。
こんにちは。mriyaです。
> 何かTO_NUMBERの変わりになるものか、
> 又は、スペースでも合計してくれるsumに変わるものを教えてください。
SQLServerだと、CAST関数かCONVERT関数が使えると思います。
使い方は、
CASTの場合 SUM(CAST(フィールド名 AS データ型))
CONVERTの場合 SUM(CONVERT(データ型,フィールド名))
で大丈夫だと思います。
早速のお返事ありがとうございました。
実行環境はSQL Serverなので試してみます。
それで・・・テスト環境がAccessなのですが、
そっちはないですよね・・・
こんにちは。mriyaです。
> それで・・・テスト環境がAccessなのですが、
> そっちはないですよね・・・
私の知っている範囲ではAccessには無かったような
気がします。iif関数を使って数値型に出来ない場合は
0に置き換えるか、そういうモジュールを作成して
クエリーから呼び出すように作るしかないかも知れません。。。
>mriyaさん
そうですよね・・・わかりました。
色々ありがとうございました。
モジュールでも作ってやってみます。
あるテーブルにある金額を降順に順位をつけるSQLをだれかしりませんか?ただし同じ同一金額の場合は順位は同じで順位を加算しなければなりません。
こんばんわ、め@804です。
> あるテーブルにある金額を降順に順位をつけるSQLをだれかしりませんか?ただし同じ同一金額の場合は順位は同じで順位を加算しなければなりません。
最近のRDBMSならば、カラムにサブクエリを使えるようです。
# 手元に環境がないので確認できませんが。
これがつかえるRDBMS(MS SQL Server2000とか、最新のOracle)ならば、以下のようなSQLでいけるのではないでしょうか。
SELECT あるテーブル別名.金額,
(
SELECT
COUNT(*) + 1
FROM
あるテーブル
WHERE
あるテーブル.金額 > あるテーブル別名.金額
) AS 順位
FROM あるテーブル AS あるテーブル別名
ORDER BY あるテーブル別名.金額 DESC;
# 今ひとつ自信がない...
はじめまして、ミナです。
次のような売上テーブルがあるのですが、
日付
担当
商品コード
金額
毎日の担当者毎の売上高のTOP3を取得したいのですが、
SQLでできますか?
Oracle 8.05/WinNT 4.0
こんばんわ。め@804です。
これ自体はOracleのFAQなのですが。単純にemp表での例を記述しますので、アレンジしてみてください。
SQL> select * from emp a where 3 >= (select count(distinct empno) from emp b where b.empno >= a.empno) order by empno desc;
これでempnoのTOP3が表示されます。
> はじめまして、ミナです。
>
> 次のような売上テーブルがあるのですが、
> 日付
> 担当
> 商品コード
> 金額
>
> 毎日の担当者毎の売上高のTOP3を取得したいのですが、
> SQLでできますか?
>
> Oracle 8.05/WinNT 4.0
ミナです。
め@804さん、レスありがとう。
>where 3 >= (select count(distinct empno)
from emp b where b.empno >= a.empno)
WHERE句にこんな書き方もできるんですね。
勉強になりました。
これをもとに何とか頑張ってみます。
これからもよろしくお願いします。
(snip)
> >where 3 >= (select count(distinct empno)
> from emp b where b.empno >= a.empno)
> WHERE句にこんな書き方もできるんですね。
> 勉強になりました。
しかし、これだと件数が多くなればなるほど遅くなります。
もし以下の構文が使えるOracleであれば、こっちのほうがいいですね。
きっと。
SELECT * FROM (SELECT * FROM emp ORDER BY empno desc)
WHERE ROWNUM < 3;
おためしあれ。
はじめまして、
テーブルを初期化する場合、
TRUNCATEするのと、DROPしてCREATEし直すことにはどのような
違いがあるのかわかりません。
わかる方がいたら、教えていただきたいのですが、
よろしくお願いします。
はじめまして。
> テーブルを初期化する場合、
> TRUNCATEするのと、DROPしてCREATEし直すことにはどのような
> 違いがあるのかわかりません。
TRUNCATEはDELETEで全部のデータを削除したのと同じような
状態になりますのでインデックスやトリガ、ルール、デフォルト
などテーブルに関連する情報は消えません。
DROPの場合はテーブルに関連する情報も消えてしまうので、
CREATEする時には、再度設定してあげる必要があります。
こんにちは まだ初心者です。
> TRUNCATEはDELETEで全部のデータを削除したのと同じような
> 状態になりますのでインデックスやトリガ、ルール、デフォルト
> などテーブルに関連する情報は消えません。
> DROPの場合はテーブルに関連する情報も消えてしまうので、
> CREATEする時には、再度設定してあげる必要があります。
ということは、
TRUNCATEとするのと、
DROPしてCREATEしてインデックスなどの情報を設定してあげることは、
同じということでしょうか?
知りたかったのはTRUNCATEしただけで、INDEXも初期化されるのかと
いうことだったんですけど、質問の仕方がまずかったですね。
mriyaさん、ありがとうございました。
こんにちは。mriyaです。
>TRUNCATEしただけで、INDEXも初期化されるのか?
TRUNCATEはDELETEのSQLを条件なしで発行したのと同じ
ようなものなので、テーブル構造とIndexは全て残ります。
DELETEとの違いは、ロールバックは出来ない。
ログに記録され無いため、DELETEトリガを起動できない。
また、的が外れてたらごめんなさい。
テーブルA フィールド1,2,3というテーブルがあり
フィールド1でGROUPしてそれに対して連番を振り
フィールド3に連番を入れる。
1____|2____|3____
001 01 10
001 02 10
002 01 11
002 03 11
003 01 12
これを一発のSQL(update)で実行したいのですが。
一発のSQLでやる理由はレスポンス重視です。
余計なワークテーブル等も使用したくありません。
だれか助けてください。
> テーブルA フィールド1,2,3というテーブルがあり
> フィールド1でGROUPしてそれに対して連番を振り
> フィールド3に連番を入れる。
> 1____|2____|3____
> 001 01 10
> 001 02 10
> 002 01 11
> 002 03 11
> 003 01 12
> これを一発のSQL(update)で実行したいのですが。
> 一発のSQLでやる理由はレスポンス重視です。
> 余計なワークテーブル等も使用したくありません。
>
> だれか助けてください。
ただのめんどくさがりとしか思えないね。
ここで答えてくれる人なんて最近ほんの数人しかいないのに。。。
がんばってね。
はじめまして。質問です。
スキーマの異なるテーブルから同時にSELECTしたい場合どう記述すればよろしいのでしょうか?
僕は以下のように、特に何も指定しないで実行したところ駄目でした。
select TBL1.USR_ID, TBL2.USR_CAR from TBL1,TBL2 where 〜〜・・・
(テーブルTBL1とTBL2は別のスキーマに存在)
よろしくお願いいたします。
こんにちわ。め@804です。
通常テーブル名は、デフォルトのスキーマが補われているので
それを明示的に記述すればだいじょうぶだとおもいます。
# もちろん、みたいスキーマのテーブルのSELECT権が、
# SELECT側にGrantされている必要がありますが。
TBL1
のかわりに、
スキーマ名.TBL1
をつかえば大丈夫ではなかったかな?
# 最近手元にOracleがないので、確認できない...
> はじめまして。質問です。
> スキーマの異なるテーブルから同時にSELECTしたい場合どう記述すればよろしいのでしょうか?
め@804さん。うまくいきました。
どうもありがとうございました。
はじめて投稿します。
UPDATE文を使って複数のテーブルを結合してデータを更新する
にはどうしたら良いのですか?それとも出来ないのですか?
わかる方が居ましたら教えて下さい。
宜しくお願いします。
はじめまして、謎の宇宙人と申します。
複数のテーブルを1回のUPDATE文で同時に更新したいという事でしょうか?
例えば
UPDATE TABLE_A, TABLE_B SET 〜
みたいなことでしたら、これはできません。
しかし、バージョンにもよりますが、オラクルではVIEWを使えばできるかもしれません。結合したVIEWの更新について調べてみてはいかがでしょうか。
では
ども、謎の宇宙人と申します。
自己レスです。
> しかし、バージョンにもよりますが、オラクルではVIEWを使えばできるかも> しれません。結合したVIEWの更新について調べてみてはいかがでしょうか。
無理でした。
難しいこと考えずに、1テーブル毎にUPDATE文を実行してください。
データ検索時、データ数が多い場合の途中中断の方法がないでしょうか?
例:
検索結果が、数万件の情報を300件を超えた所で中断して、
検索できた300件の情報を取得する方法のSQL文
Oracleでは以下のような感じでできると思います。
SELECT * FROM でかい表 WHERE ROWNUM <= 300;
> データ検索時、データ数が多い場合の途中中断の方法がないでしょうか?
> 例:
> 検索結果が、数万件の情報を300件を超えた所で中断して、
> 検索できた300件の情報を取得する方法のSQL文
素早い対応、ありがとうございます。
さっそく試してみます。
> Oracleでは以下のような感じでできると思います。
>
> SELECT * FROM でかい表 WHERE ROWNUM <= 300;
>
> > データ検索時、データ数が多い場合の途中中断の方法がないでしょうか?
> > 例:
> > 検索結果が、数万件の情報を300件を超えた所で中断して、
> > 検索できた300件の情報を取得する方法のSQL文
一時表ってPRIMARY KEYを設定することは
できないんでしょうか?
その他、役に立つ情報があれば教えてください。
一時表が使用する表領域はTEMPだけですか?
ユーザーの表領域に設定することはできませんか?
ワークテーブルとして使用したいのですが件数が多いパターンもあるので
現在、評価中です。
> 一時表が使用する表領域はTEMPだけですか?
> ユーザーの表領域に設定することはできませんか?
>
> ワークテーブルとして使用したいのですが件数が多いパターンもあるので
> 現在、評価中です。
一時表領域とワークテーブルを混同しているようですが、
大量データを扱う時にワークテーブルを使用するのであれば、
ユーザー表領域にテーブルを作成してあげればよいのではないでしょうか。
その際、PRIMARY KEYを設定することも、もちろん可能です。
一時表領域とは、メモリが足りない場合に一時的に利用されるセグメントのための表領域のことですよ。
はずしてたらごめんね。
> 一時表領域とは、メモリが足りない場合に一時的に利用されるセグメントの>ための表領域のことですよ。
>
> はずしてたらごめんね。
一時表領域ではなく一時表です。
わたしの知識不足で申し訳ないです。
質問するときには、OS情報やバージョンなどがあると非常に助かるのですが、
せっかく回答してくださった方に、説教たれるとは。とほほ。。。
> 一時表領域ではなく一時表です。
8iから作成可能になりました。
次の制限事項があります。
・パーティション化、索引構成化、クラスタ化はできない
・参照整合性制約を指定できない
・NESTED TABLE、VARRAY型の列を含むことはできない
・TABLESPACE、LOGGING、NOLOGGING、MONITORING、NOMONITORING、
STORAGEの句を指定できない
・パラレルDML、パラレル問い合わせはサポートされていない
・一時表に分散トランザクションはサポートされていない
・PCTFREE、PCTUSEDなどの記憶特性を指定することはできない
以上
> > 一時表領域とは、メモリが足りない場合に一時的に利用されるセグメントの>ための表領域のことですよ。
> >
> > はずしてたらごめんね。
>
> 一時表領域ではなく一時表です。
だから?
こんばんわ、め@804です。
一時表をなににつかいたいのかよくわからないです。
一時的に使う表になぜインデックス?
なぜTEMP以外におきたいのかなぁ。
> 一時表が使用する表領域はTEMPだけですか?
> ユーザーの表領域に設定することはできませんか?
>
> ワークテーブルとして使用したいのですが件数が多いパターンもあるので
> 現在、評価中です。
> 一時的に使う表になぜインデックス?
データが多いから
> なぜTEMP以外におきたいのかなぁ。
TEMP領域に集中してしまうから分割したい。
もうちょっとかんがえて返事ください。
(snip)
> もうちょっとかんがえて返事ください。
じゃあ、もう少しよく考えて質問してください。
変な質問で申し訳ないのですが、
現在、NTサーバ上(英語OS)のSQL Server の 中のひとつのテーブルに
日本語の列を追加したいのですが、きちんと表示させるための
Best way がわからなくて困ってます。どなたかヒントをください。
ちなみに、そのNTサーバのOSを日本語に変更することはできないのです。
よろしくお願いします。
め@804です。これはたとえば英語版のソフトに入力した日本語が
文字化けするけど、どうしたらいい、という一般的な質問と同じで
ソフトウェアごとにかなり違うと思います。
また「表示」はどこの表示化によって、方法がぜんぜん違うとおもうのですが。
> 変な質問で申し訳ないのですが、
> 現在、NTサーバ上(英語OS)のSQL Server の 中のひとつのテーブルに
> 日本語の列を追加したいのですが、きちんと表示させるための
> Best way がわからなくて困ってます。どなたかヒントをください。
>
> ちなみに、そのNTサーバのOSを日本語に変更することはできないのです。
>
> よろしくお願いします。
SQL SERVERでは、CASE文が使えますが、それと同じ機能は
ORACLEにありませんか?
<SQL_SV>
SELECT TEST = CASE TEST_KB = '1' THEN '○' ELSE '×' END
FROM TEST_TABLE
ども、謎の宇宙人と申します。
> SQL SERVERでは、CASE文が使えますが、それと同じ機能は
> ORACLEにありませんか?
>
> <SQL_SV>
> SELECT TEST = CASE TEST_KB = '1' THEN '○' ELSE '×' END
> FROM TEST_TABLE
オラクルではDECODE関数がそれに当たると思います。
SELECT DECODE(TEST_KB, '1', '○', '×') AS TEST FROM TEST_TABLE
さらに言うと
「'1'の場合は'○'、'2'の場合は'△'、それ以外の場合は'×'」のようなときは
SELECT DECODE(TEST_KB, '1', '○', '2', '△', '×') AS TEST
FROM TEST_TABLE
とします。
うおっ!!すっげー助かりました。
またわからなくなったら書きますんで
よろしくお願いします。
はじめまして。Kaiと申します。
LIKE演算子を使用してデータを絞り込む時に、文字列内に'%'、
または'_'等のワイルドカードを含む文字列を検索する場合ど
うしたらよいのでしょうか?
ご存知の方がおられましたらご教授ください。
宜しくお願いします。
使用環境
OS:RedHat 7J
DB:PostgresSQL
どうも、謎の宇宙人と申します。
> LIKE演算子を使用してデータを絞り込む時に、文字列内に'%'、
> または'_'等のワイルドカードを含む文字列を検索する場合ど
> うしたらよいのでしょうか?
>
オラクルではESCAPEオプションを使えばできます。
例えば
SELECT * FROM TABLEA
WHERE FIELD1 LIKE '%HOGE\_HOGE\%%' ESCAPE '\'
ESCAPEで指定した文字'\'の後ろの'%'や'_'はリテラル文字として
判断されます。
上記のWHERE条件は'HOGE_HOGE%'を含むデータを検索します。
ESCAPE文字は任意に指定できるようです。
PostgresSQLで使えるかどうかは確認していませんが、
参考になれば幸いです。
では
> どうも、謎の宇宙人と申します。
>
> > LIKE演算子を使用してデータを絞り込む時に、文字列内に'%'、
> > または'_'等のワイルドカードを含む文字列を検索する場合ど
> > うしたらよいのでしょうか?
> >
>
> オラクルではESCAPEオプションを使えばできます。
> 例えば
>
> SELECT * FROM TABLEA
> WHERE FIELD1 LIKE '%HOGE\_HOGE\%%' ESCAPE '\'
>
> ESCAPEで指定した文字'\'の後ろの'%'や'_'はリテラル文字として
> 判断されます。
> 上記のWHERE条件は'HOGE_HOGE%'を含むデータを検索します。
> ESCAPE文字は任意に指定できるようです。
>
> PostgresSQLで使えるかどうかは確認していませんが、
> 参考になれば幸いです。
>
> では
こんにちはKaiです。
謎の宇宙人さんはじめまして。
ご返答を受けて、上記のようなSQL文を試してみましたが、
エラーが出てしまいました。
そこで、Postgresの文献を調べたところ、ESCAPE句はPostgres6.5.1では
予約語ではありますが、キーワードとしての認識はされないとの情報を
えました。しかし、Postgres7.1のマニュアルではこのESCAPE句の説明が
なされ、ディフォルトのエスケープ文字が'\(バックスラッシュ)'に設定
されていることがわかりました。
私が使っているのはPostgreSQL7.01・・・。中途半端ですねぇー。
(そういえば質問スレッドにバージョン書くの忘れました。 m(_ _)m)
どうやら使えなさそうです。
現在、一応の解決策としてLIKE句の変わりに ~(チルダ)演算子を利用し、
正規表現として検索することで結果は出せました。
SELECT * FROM TABLEA
WHERE FIELD1 ~ 'HOGE[_]HOGE[%]';
上記のような指定で 'HOGE_HOGE%'を含む文字列が検索できます。
今のところこのような方法がおもいつきません。
エスケープ文字ってほんとにないんでしょうかねぇ。
というより最新版のPostgres使えばいいんでしょうね、きっと。
謎の宇宙人さんレスありがとうございました。
Kai
こんにちは。
既存のDBで
char 50のカラムがカラムがあるのですが、
これをchar 100に変更したいのですが何か良い方法は
無いでしょうか?
少々SQLとは異なる内容かも知れませんがご存知の方がおられましたら
教えて頂けないでしょうか?
宜しくお願い致します。
ALTER TABLE文でできると思いますよ。
オラクル以外はちょっとわかりませんが。
DBはオラクルを利用しているものですが、
VBでSQL検索する時に大文字小文字若しくは全角半角の区別が関係なしに
抽出できる方法を模索しています。知っている方御教授願います。
> DBはオラクルを利用しているものですが、
> VBでSQL検索する時に大文字小文字若しくは全角半角の区別が関係なしに
> 抽出できる方法を模索しています。知っている方御教授願います。
OracleならSQLの関数でUPPER(すべて大文字にする)関数や
TO_MULTI_BYTE(すべて全角にする)関数がありますので
その関数を組み合わせて使ってみては?
始めまして。NANAと申します。
オラクルの関数でADD_MONTHSがありますが、この関数のように、
nヶ月を加えるのではなく、n日を加える方法をどなたか知っていたら
教えて下さい。
よろしくお願いします。
たとえば現在の日付の4日後であれば
sysdate + 4
です。
1999年05月22日の336日後であれば
to_date('1999/05/22', 'YYYY/MM/DD') + 336
で日付の足し算が出来ます。引き算はマイナスすればいいだけ。
初歩的な質問で申し訳ありませんでした。
うまくいきました。
iwaさん、ありがとうございました。(^_^)
はじめまして、こんにちは。
select文でレコードを取得したところ、重複しているレコードがあるので、そのレコードを1度だけ(重複しないで)表示する為にはどうしたらよいですか?
> はじめまして、こんにちは。
>
> select文でレコードを取得したところ、重複しているレコードがあるので、そのレコードを1度だけ(重複しないで)表示する為にはどうしたらよいですか?
先程のではどうなっているのかがまったくわからないので追加記入します。
magazinテーブル
master_no sisetsu_no rdate
-----------------------------------
1 1 登録日
2 1 登録日
5 2 登録日
9 1 登録日
10 2 登録日
・ ・ ・
・ ・ ・
・ ・ ・
-----------------------------------
masterテーブル
master_no sisetsu_no 名前 ・・・
----------------------------------------
1 1 AAA ・・・
2 1 BBB ・・・
5 2 CCC ・・・
9 1 DDD ・・・
10 2 EEE ・・・
・ ・ ・ ・・・
・ ・ ・ ・・・
・ ・ ・ ・・・
----------------------------------------
yoyakuテーブル
master_no sisetsu_no y_rdate ・・・
----------------------------------------------
1 1 予約日 ・・・
2 1 予約日 ・・・
5 2 予約日 ・・・
1 1 予約日 ・・・
10 2 予約日 ・・・
・ ・ ・ ・・・
・ ・ ・ ・・・
・ ・ ・ ・・・
------------------------------------------------
master_no = 顧客コード(masterテーブルではカウンター)
sisetsu_no = 施設コード
$sisetsu_no = URLにある施設コード
SELECT * FROM magazin,master,yoyaku WHERE magazin.master_no=master.master_no and magazin.sisetsu_no=$sisetsu_no and yoyaku.master_no=magazin.master_no and yoyaku.sisetsu_no=$sisetsu_no
というSQLだとyoyakuテーブルにあるすべてのデータ(magazinテーブルと一致したもの)が抽出されるので、master_noの重複しているものは1度だけの表示にしたいのですが、どうしたらよいのかがわからないです。
ご教授お願いします。
distinct や group by を
使ってみては?
はじめまして。SQL初心者のえびちりです。早速ですが、質問をしたいと思います。
検索の条件で、項目の値がひらがなのものを検索する、という処理をしなければならないのですが、自分で調べた限りではちょっと方法がわかりませんでした。
基本的な質問で申し訳ないのですが、どなたか教えて下さい。
はじめまして、謎の宇宙人と申します。
やったことないので、自信ありませんが、
dump関数を使ってみたらどうでしょう。
ひらがなは10進表記で先頭1バイトが130になるみたいですね。
select * from TABLE
where dump(FIELD) like '%130,%'
とか。。。かなり、自信なし。。。<−じゃぁ、投稿するな!(笑)
調べれば、もっと良い方法があるのかも。。。
こんなことしなくても簡単にできる方法はないのかな〜?
やったことある人がいたら教えて〜♪
素早い返答ありがとうございます。
試してみた所、うまくいきました!簡単に出来たので、ビックリしています。
なぞの宇宙人さん、ありがとうございました。
How are you.
この べーじを 読みました。
いいてす。
はじめて投稿します。SQL初心者です。
AAA BBB
NA NAME NA NAME
1 みかん 1 みかん
2 りんご 2 りんご
3 きゅうり 3 きゅうり
4 ぶどう
例えばこのようなテーブルがあるとして、
SELECT AAA.NA, AAA.NAME FROM AAA, BBB WHERE AAA.NAME = BBB.NAME
とやれば当然
AAA
NA NAME
1 みかん
2 りんご
3 きゅうり
となりますが、それ以外のものを絞り込む場合
SELECT AAA.NA, AAA.NAME FROM AAA, BBB WHERE AAA.NAME <> BBB.NAME
こうしてやると
AAA
NA NAME
1 みかん
1 みかん
2 りんご
2 りんご
3 きゅうり
3 きゅうり
4 ぶどう
4 ぶどう
4 ぶどう
となってしまいますよね。
なんだか構文的にみて本来は
AAA
NA NAME
4 ぶどう
だけになりそうなのですが、こうなりません。初心者ゆえなんだかすごい
思い違いをしているのでしょうか。
上のように検索条件として指定したもの以外を得る方法があるのでしょうか。
どなたかご教授下さい。
どうも、謎の宇宙人と申します。
> はじめて投稿します。SQL初心者です。
>
> AAA BBB
> NA NAME NA NAME
> 1 みかん 1 みかん
> 2 りんご 2 りんご
> 3 きゅうり 3 きゅうり
> 4 ぶどう
>
> 例えばこのようなテーブルがあるとして、
−−−中略−−−
> となりますが、それ以外のものを絞り込む場合
> SELECT AAA.NA, AAA.NAME FROM AAA, BBB WHERE AAA.NAME <> BBB.NAME
> こうしてやると
>
> AAA
> NA NAME
> 1 みかん
> 1 みかん
> 2 りんご
> 2 りんご
> 3 きゅうり
> 3 きゅうり
> 4 ぶどう
> 4 ぶどう
> 4 ぶどう
> となってしまいますよね。
>
> なんだか構文的にみて本来は
>
> AAA
> NA NAME
> 4 ぶどう
> だけになりそうなのですが、こうなりません。初心者ゆえなんだかすごい
> 思い違いをしているのでしょうか。
> 上のように検索条件として指定したもの以外を得る方法があるのでしょうか。
> どなたかご教授下さい。
誰でも一度は疑問に思うところだと思います。
「WHERE AAA.NAME <> BBB.NAME」この条件について少し検証してみましょう。
まず、
SELECT AAA.NA, AAA.NAME FROM AAA, BBB
この結果は4×3=12件になることを理解してください。
WHERE AAA.NAME <> BBB.NAMEの条件について、テーブルAAAを基準として考えてみます。
AAA.NAMEがみかんだったとして、BBBから選択されるレコードはBBB.NAMEがみかんではないレコード、
つまり、りんご、きゅうりの2件です。
同様にAAA.NAMEがりんごの場合はみかん、きゅうりの2件です。
きゅうりの場合はみかん、りんごの2件。
ぶどうの場合はみかん、りんご、きゅうりの3件です。
これらを全て合せると9件となります。
SELECT AAA.NA, AAA.NAME, BBB.NA, BBB.NAME FROM AAA, BBB
WHERE AAA.NAME <> BBB.NAME
このSQLの結果と比較してみるとわかりやすいかも。
長くなりましたが、本題に入りましょう。
AAAのテーブルに存在して、BBBに存在しないレコードを検索する場合、
例えば、
SELECT AAA.NA, AAA.NAME FROM AAA
WHERE AAA.NAME NOT IN (SELECT BBB.NAME FROM BBB)
とします。
オラクルにはMINUS、INTERSECTという便利な集合演算子もあります。
調べてみてね。
謎の宇宙人さん 初めまして
さっそく、やってみました。感激です。
なぜこうなるかの説明も、とてもわかりやすく、納得できました。
やはり単純ではありませんでしたね。
ありがとうございました。
初めて投稿させていただきます。
現在、Sybaseを使用してDBアプリケーションを作成中なのですが、
以下のような検索は可能なのでしょうか?
table
AAAA BBBB CCCC
11 01 YY
11 02 ZZ
11 03 XX
22 01 YY
33 01 ZZ
上記のようなテーブルがあるとし、
1.カラムCCCCをYY検索する。 select * from table where CCCC='yy'
結果以下のように出力されます。
AAAA BBBB CCCC
11 01 YY
22 01 YY
2.今度は、ZZで検索をします。
結果は当然以下のようになります。
AAAA BBBB CCCC
11 02 ZZ
33 01 ZZ
3.そこで、YYとZZ両方含まれるものを一度に検索を行いたいのですが、何か良い方法は無いでしょうか?
AAAA BBBB CCCC
11 01 YY
11 02 ZZ
というように結果が出力されれば好ましいのですが・・・。
良い方法がある方ご教授のほど宜しくお願い致します。
こんにちは、謎の宇宙人と申します。
select * from table
where CCCC='YY' or CCCC='ZZ'
order by AAAA
かな?
それとも、CCCCにYY、ZZを共に保有するAAAAってことか?
それなら
select * from table
where AAAA IN (select AAAA from table where CCCC='YY')
and AAAA IN (select AAAA from table where CCCC='ZZ')
and CCCC IN ('YY', 'ZZ')
order by AAAA
Sybase知らないけど、Oracleならコレでイケルよ。
外してたらゴメンね。
こんにちは、tonitaです。
謎の宇宙人さん早速のレスありがとうございました。
確かにこの方法で取得することが出来ました。
やはり、IN SELECTを使用するしかないですよね。
ありがとうございました。
> こんにちは、謎の宇宙人と申します。
>
> select * from table
> where CCCC='YY' or CCCC='ZZ'
> order by AAAA
>
> かな?
> それとも、CCCCにYY、ZZを共に保有するAAAAってことか?
> それなら
>
> select * from table
> where AAAA IN (select AAAA from table where CCCC='YY')
> and AAAA IN (select AAAA from table where CCCC='ZZ')
> and CCCC IN ('YY', 'ZZ')
> order by AAAA
>
> Sybase知らないけど、Oracleならコレでイケルよ。
> 外してたらゴメンね。
はじめまして、ひよっこエンジニアのSue(すー)と申します。
早速ですが、教えて下さい。
Oracle用のストアドを解析していて、以下のような構文を見付けました。
OPEN cur2_1;
FETCH cur2_1 INTO W_NUTUI_DS1;
IF NOT cur2_1%FOUND AND NOT cur2_1%NOTFOUND THEN
W_SUB_RTN_CD := 9;
RETURN;
これまで、
IF cur2_1%FOUND THEN
とか、
IF cur2_1%NOTFOUND THEN
といった構文は何度も見てきましたが、
上記のような構文はお初です。
一見相反する条件が同居しているようで、なんとも理解し難いのですが、
この構文、本当は一体どのような意味なのでしょうか?
すみませんが、よろしくお願い致します。m(_ _)m
カーソルについては、%FOUND, %NOTFOUND以外になる場合は、
カーソルがオープンされていないときだけだとおもいます。
その場合、例外が送出されて、例外処理にいきますので、
本コードのIF文以降は実行されないのではないかとおもいます。
単に不測の処理用に書いたコードが残ってしまっているもの?
> はじめまして、ひよっこエンジニアのSue(すー)と申します。
> 早速ですが、教えて下さい。
> Oracle用のストアドを解析していて、以下のような構文を見付けました。
>
> OPEN cur2_1;
> FETCH cur2_1 INTO W_NUTUI_DS1;
> IF NOT cur2_1%FOUND AND NOT cur2_1%NOTFOUND THEN
> W_SUB_RTN_CD := 9;
> RETURN;
>
> これまで、
> IF cur2_1%FOUND THEN
> とか、
> IF cur2_1%NOTFOUND THEN
> といった構文は何度も見てきましたが、
> 上記のような構文はお初です。
> 一見相反する条件が同居しているようで、なんとも理解し難いのですが、
> この構文、本当は一体どのような意味なのでしょうか?
>
> すみませんが、よろしくお願い致します。m(_ _)m
開発環境:ORACLE+PL/SQLです。
下記SQLでのUPDATEが出来ません、この様な構文が書けるのかさえわかりません何方か教えていただけませんか?よろしくお願いします。
行:1でエラーが発生しました。
ORA-01407: cannot update ("APPS"."RGLTSGHS"."SGHS_HFKIJBNS") to NULL
UPDATE
rgltsghs g
SET (g.sghs_hfkijbns
) =
(SELECT
sum(i.hfkijbns / j.hfkijbnb)
FROM
-- i:按分するための分子
(SELECT
sghs_sokcod sokcod,
sghs_toksgcod toksgcod,
sghs_seikbn seikbn,
sghs_shsgcod shsgcod,
sghs_sghfptcod sghfptcod,
SUM(NVL(sghs_hfkijbns,0)) hfkijbns
FROM
rgltsghs
WHERE
sghs_gltnicod = '20'
AND sghs_hflevel = '1'
GROUP BY
sghs_sokcod,
sghs_toksgcod,
sghs_seikbn,
sghs_shsgcod,
sghs_sghfptcod) i,
-- j:按分するための分母
(SELECT
sghs_sokcod sokcod,
sghs_toksgcod toksgcod,
sghs_sghfptcod sghfptcod,
SUM(NVL(sghs_hfkijbns,0)) hfkijbnb
FROM
rgltsghs
WHERE
sghs_gltnicod = '20'
AND sghs_hflevel = '1'
GROUP BY
sghs_sokcod,
sghs_toksgcod,
sghs_sghfptcod) j
WHERE
i.sokcod = j.sokcod
AND i.toksgcod = j.toksgcod
AND i.sghfptcod = j.sghfptcod
AND i.hfkijbns != 0
AND j.hfkijbnb != 0
AND g.sghs_hfkijbns != 0
AND g.sghs_gltnicod = '20'
AND g.sghs_hflevel = '1'
AND g.sghs_sokcod = i.sokcod
AND g.sghs_toksgcod = i.toksgcod
AND g.sghs_seikbn = i.seikbn
AND g.sghs_shsgcod = i.shsgcod
AND g.sghs_sghfptcod = i.sghfptcod
GROUP BY
i.sokcod,
i.toksgcod,
i.seikbn,
i.shsgcod,
i.sghfptcod)
はじめまして、謎の宇宙人と申します。
> 行:1でエラーが発生しました。
> ORA-01407: cannot update ("APPS"."RGLTSGHS"."SGHS_HFKIJBNS") to NULL
>
エラーの内容は単に
「NOT NULL制約のあるフィールドをNULLに更新できません。」
というものです。
UPDATE文でSUM()を使っているので、該当データがない場合にはNULLが
戻されているものと思われます。
SQLの構文は問題ないようなので、データがうまく取れてないようですね。
もう一度、条件を見直してみるか、NVL()でNULLの場合は0とするなど
してみてはいかがでしょうか。
はじめて投稿します。教えてください。
SQLServer6.0を使用しています。ACCESSでいう不一致クエリーをビューでしたいのですが、JOINが使用できない?ので=/*=/=*を使用しています。しかし不一致を抽出するときの[項目 is null]がうまく抽出されません。結果的には、一致データと不一致データが抽出されます。
構文は下記の通りです。
結果はBのデータ全部が抽出される。
------------------------------------------
SELECT
B.*
FROM A,B
WHERE
((A.1 =* B.1) AND
(A.2 =* B.2) AND
(A.3 =* B.3) AND
(A.4 =* B.4) AND
(A.5 =* B.5) AND
(A.6 =* B.6)) AND
((A.1 is null) AND
(A.2 is null) AND
(A.3 is null) AND
(A.4 is null) AND
(A.5 is null) AND
(A.6 is null))
-------------------------------------------
どうぞよろしくお願い致します。
はじめまして、いがと申します。
カラムの中にお台場、上野、銀座というデータが入っている場合、
ソート処理で<上野、お台場、銀座>という順番でソート抽出してみたい
のですが、実際には<お台場、上野、銀座>と抽出されます。
どうすれば、うまくいくのでしょうか?
よろしくお願いします。
> はじめまして、いがと申します。
> カラムの中にお台場、上野、銀座というデータが入っている場合、
> ソート処理で<上野、お台場、銀座>という順番でソート抽出してみたい
> のですが、実際には<お台場、上野、銀座>と抽出されます。
> どうすれば、うまくいくのでしょうか?
>
> よろしくお願いします。
読みをひらがな、あるいはカタカナで登録してソートすれば?
なぞの宇宙人さんありがとうございました。
結局、ほかの情報を持たせることで、ソートをするようにしました。
アドバイスありがとうございました。
> > はじめまして、いがと申します。
> > カラムの中にお台場、上野、銀座というデータが入っている場合、
> > ソート処理で<上野、お台場、銀座>という順番でソート抽出してみたい
> > のですが、実際には<お台場、上野、銀座>と抽出されます。
> > どうすれば、うまくいくのでしょうか?
> >
> > よろしくお願いします。
>
> 読みをひらがな、あるいはカタカナで登録してソートすれば?
dBASEのファイル(.dbf)をORACLEにUploadしたいのですが、SQLLoaderを使用してできるのでしょうか。
できなければできる方法をご存知でしょうか。
宜しくお願い致します。
もともとdbfファイルということであれば、それほど大きくはないはずですから、Webからdbf to csvコンバータとか探してきて、CSVにして、それからPerlなどのスクリプトでSQLLoaderで流し込めばできるでしょう。きっと。
> dBASEのファイル(.dbf)をORACLEにUploadしたいのですが、SQLLoaderを使用してできるのでしょうか。
> できなければできる方法をご存知でしょうか。
> 宜しくお願い致します。
あるデパートの購買履歴(お客一人に一意の会員コードをもつ)から本日
購買した会員の購買履歴よりもっとも古い購買日を求め、なおかつもっ
とも古い購買日の中で一番新しい時刻を求める(その日に複数回購入し
ている場合があるので)SQL文を一度で書きたいのですが、かけるの
でしょうか?
例えば3月28日に会員NO1(3月1日がもっとも古い購買日)とNO2(同3月3日)が購入した場合(他に会員はいっぱいいます)、
NO1 最古購買日3月1日 購買NO002(3月1日の最後の購買)
NO2 最古購買日3月3日 購買NO005(3月3日の最後の購買)
と出したいです。
色々考えたのですが、3重の副問い合せ文ならば可能に思えるのですが、
3重の副問い合せは一般のプログラムでやっていいものなのでしょうか?
一回の副問い合せで出来るやり方をだれか教えて下さい
以上よろしくお願いします。
こんにちは。
oracle7.3にてユニオンクエリーみたいな事というのは
出来ないのでしょうか?
同じような2つの表を1つの表にしたいのですが...
なにか良いSQLは在りませんでしょうか?
宜しくお願いいたします。
> こんにちは。
> oracle7.3にてユニオンクエリーみたいな事というのは
> 出来ないのでしょうか?
> 同じような2つの表を1つの表にしたいのですが...
その場合単純にSELECT文 UNION SELECT文ではダメでしょうか。
もしくはすべての行が欲しいのであれば
SELECT文 UNION ALL SELECT文でどうでしょうか?
> なにか良いSQLは在りませんでしょうか?
>
> 宜しくお願いいたします。
点数を扱っているデータベースをつくっています。
そこで一番点が高いものを取り出したいのですが、
Whereのあとにorder by descを使うと
1番高い数値が2つあっても一つしかとってきてくれません。
どのようにしたらよいのでしょうか。
こんちわ、謎の宇宙人と申します。
> 点数を扱っているデータベースをつくっています。
> そこで一番点が高いものを取り出したいのですが、
> Whereのあとにorder by descを使うと
> 1番高い数値が2つあっても一つしかとってきてくれません。
> どのようにしたらよいのでしょうか。
単に降順に並べてるだけではなさそうですね。
GROUP関数を使ってませんか?(MAXとか)
もう少し詳しく教えて。
お返事ありがとうございます。パソコンが使えなかったためなかなかこちらから書くことができませんでした。
実際使っているSQLはこれです
SQL="SELECT [votePoint].[titleID], [votePoint].[points], [odds].[odds], [betRecord1].[uid], [betRecord1].[bet1], [betRecord1].[bet2], [betRecord1].[bet3], [betRecord1].[bet4], [betRecord1].[bet5], [betRecord1].[raceID], [titlename].[title],[titlename].[artist],[racetitle].[racetitle] FROM ((racetitle INNER JOIN betRecord1 ON [racetitle].[raceID] =[betRecord1].[raceID]) INNER JOIN (odds INNER JOIN titlename ON [odds].[titleID] =[titlename].[titleID]) ON [racetitle].[raceID] =[titlename].[raceID]) INNER JOIN votePoint ON [titlename].[titleID] =[votePoint].[titleID] WHERE uid='" &uid &"'ORDER BY points DESC "
はじめまして。
いつもこのページを参考にさせていただいております。
現在「SQLプログラミング入門」を使用してSQLの勉強をしている者です。
質問です。
この本で使用しているサンプルのSQLはこちらからダウンロードできますが、サンプルとなっているデータのダウンロードはできますでしょうか?
本と同じデータ環境でSQLを実行できると理解しやすいので。
Oracle8.0.5を使用しております。
CSVやDMPなどであるととても助かるのですが。。。
何か情報をご存知の方がいらっしゃいましたらお教えください。
テストデータくらい自分で作りましょう。
面倒くさいなんて言ってるようじゃ上達しないよ。
アドバイスを頂きましてありがとうございます。
当初データを作成しようと思っていましたが、
サンプルダウンロードというページを見つけたので
もしかしたらデータもあるのではないかと考えた次第です。
こちらからデータを入手することはできないということですね。
それでは失礼します。
こんにちは。
ある変数に”1”という数字が入っています。
それを、ちがう変数に”01”という形で入れたいのですが、
どうやってPL/SQLで記述すればよいのでしょうか?
教えてください。
宜しくお願いいたします。
> こんにちは。
はじめまして、ELLさん。
謎の宇宙人と申します。
> ある変数に”1”という数字が入っています。
> それを、ちがう変数に”01”という形で入れたいのですが、
> どうやってPL/SQLで記述すればよいのでしょうか?
> 教えてください。
こういう事でしょうか?
DECLARE
num1 NUMBER(1); /* ある変数 */
char1 CHAR(2); /* ちがう変数 */
BEGIN
num1 := &num1; /* 例えば 1 を入力
char1 := TO_CHAR(num1, 'FM09'); /* ここで変換 */
dbms_output.put_line(char1); /* 出力は'01'となります。 */
END;
どうでしょう?
でわでわ。。。
謎の宇宙人さんへ。
ありがとうございました。
無事出来ましたー。
ELL
Access97で本書を使用し、SQLを勉強中ですが、コメント行の記述方法がわかりません。
本書のP33の方法で試してみましたがエラーとなってしまいます。
ご存知の方がいらっしゃいましたら教えてください。
たしか私の記憶だと、Accessはクエリーにコメントはかけなかったような
気がします。
> Access97で本書を使用し、SQLを勉強中ですが、コメント行の記述方法がわかりません。
> 本書のP33の方法で試してみましたがエラーとなってしまいます。
> ご存知の方がいらっしゃいましたら教えてください。
sequence のクリアは
DROP&CREATE 以外の方法はないのでしょうか
ALTER のようなもので初期値に戻すことはできないのでしょうか。
使用目的としては、
PL−SQLでシーケンスをクリアしたい。です。
DROP&CREATE だとエラーになってしまう。
どなたか教えて下さい。
> sequence のクリアは
> DROP&CREATE 以外の方法はないのでしょうか
> ALTER のようなもので初期値に戻すことはできないのでしょうか。
たとえばAというsequenceがあったばあい、
SQL> SELECT A.NEXTVAL FROM DUAL;
5
のような場合、以下の手順で戻せます。いったんINCREMENT句で
減らしたい方向に戻した後、通常使いたい値に設定し直します。
ただPL/SQLからできたかどうかは、今Oracleの実行環境がないので
定かではありません。試してみてください。
SQL> ALTER SEQUENCE A INCREMENT BY -4;
Sequence altered.
SQL> SELECT A.NEXTVAL FROM DUAL;
1
SQL> ALTER SEQUENCE A INCREMENT BY 1;
Sequence altered.
> 使用目的としては、
> PL−SQLでシーケンスをクリアしたい。です。
> DROP&CREATE だとエラーになってしまう。
>
> どなたか教えて下さい。
3ヶ月後に返信があるとは・・・
め@804さん、ありがとうございます。
ワイルドカードの基本かもしれないのですが
Access2000で開発しています。
select 半角フリガナ from 人物TBL
where 半角フリガナ like 'スス*'
で 結果 ススキ.... も スズキ.... も取得できたいのですが
'スズ...' が取得できません。濁点を一文字にしたような検索は
できないのでしょうか?
Accessの97と2000で試してみました。
97はスス*でスズキとススキの両方を検索できますが、
2000はスス*でススキのみ、スズ*でスズキになってしまうようですね。
役に立たなくてすみません。。。
Resありがとうございます。
> Accessの97と2000で試してみました。
> 97はスス*でスズキとススキの両方を検索できますが、
> 2000はスス*でススキのみ、スズ*でスズキになってしまうようですね。
そうなんです。
できていたことが できなくなって、気持ちが悪いのです。
> 役に立たなくてすみません。。。
いいえ ありがとうございました。
わざわざ調べていただいて。。。
結局 検索できないままにしてしまいましたが
不思議なことが あるものですね。。。
それでは お礼がおそくなって ごめんなさい。
orじゃ駄目ですか?
select 半角フリガナ from 人物TBL
where 半角フリガナ like 'スス*'
or 半角フリガナ like 'スズ*'
Null八さん 本当にご親切に ありがとうございました。
> select 半角フリガナ from 人物TBL
> where 半角フリガナ like 'スス*'
> or 半角フリガナ like 'スズ*'
確かに これで ススキ も スズキ も 取得できるのですが
or を 使わないで 一発で 取得 は やっぱり
無理なのでしょうか。
検索の処理をコーディングしているのですが
半角カタカナ 濁点つけることができる文字判別など しなくては
いけなくなるので ワイルドカードの使い方で
簡単に行く方法が あれば と 思ったのですが…
はじめまして、Ryokoです。
実は、SQLで値を抽出する時に列(列名)を多く指定しすぎたために、
「ソートが長すぎます!」
という、エラーが起きてしまいました。
SQLで抽出できる項目には限界があるのでしょうか?
すごく悩んでます。(> <)
誰か教えてくださ〜い!
お願いします。
P.S oracle8を使ってます。
Oracleということでしたら、単にデフォルトで用意されている
ソート用のテンポラリ領域が不足しているだけではないのかな?
そこを拡張すればできると思います。
> はじめまして、Ryokoです。
>
> 実は、SQLで値を抽出する時に列(列名)を多く指定しすぎたために、
> 「ソートが長すぎます!」
> という、エラーが起きてしまいました。
> SQLで抽出できる項目には限界があるのでしょうか?
>
> すごく悩んでます。(> <)
> 誰か教えてくださ〜い!
> お願いします。
>
> P.S oracle8を使ってます。
[OSのVER]:Win95
[SQLServerのVER]:7
初めて投稿します。MovePreviousについて教えて下さい。
MoveFirst,MoveLast,MoveNextは問題無いのですが、MovePreviousだけがうまく動作してくれません。カーソルタイプ(adOpenDynamic)も間違って無いと思うのですが、何度やっても何故かBOFになってしまい、一つ前のレコードを検索出来ません。どなたかご教示下さい。
(過去ログも検索してみましたが、分かりませんでした)
------------------------------------------------
Set TACHIAI = New ADODB.Connection
TACHIAI.ConnectionString= "Provider=sqloledb;server=FMS907201;database=TACHIAI;uid=sa;pwd=;driver={SQLServer};"
TACHIAI.Open
Set rs1 = New ADODB.Recordset
rs1_Opn_Flg = 0 '* テーブルオープンフラグ リセット
SQLStr = "SELECT * FROM T_SakbanTbl WHERE "
SQLStr = SQLStr & "SKSAKBAN >= '" & Mid$(XSKSAKBAN, 1, 9) & "'"
'*
If rs1_Opn_Flg = 0 Then '* テーブル未オープン --- Open & Search
rs1.Open SQLStr, TACHIAI, adOpenDynamic
rs1_Opn_Flg = 1
Else '* テーブルオープン済 --- Search
Set rs1 = TACHIAI.Execute(SQLStr, , adCmdText)
rs1.Close
rs1.CursorType = adOpenDynamic
rs1.Open
End If
rs1.MovePrevious
If rs1.BOF Then --------<必ずBOFになってしまう>
rs1.MoveFirst
Status = 9
Exit Sub
----------------------------------------------------
以上、宜しくお願い致します。
MovePreviousを実行する時は、その前にMoveNextでレコードセットを移動させています。
ちなみにMoveNextの実行プログラムは、MovePreviousの処理と同じプログラムです。
MovePrevious→MoveNext、BOF→EOFに変わっただけです。
宜しくお願い致します。
お騒がせしました。
どうにか自分で解決出来ましたので報告します。
まず、
>SQLStr = "SELECT * FROM T_SakbanTbl WHERE "
SQLStr = SQLStr & "SKSAKBAN >= '" & Mid$(XSKSAKBAN, 1, 9) & "'"
↓
SQLStr = SQLStr & "SKSAKBAN <= '" & Mid$(XSKSAKBAN, 1, 9) & "'"
上記の部分のプログラムが間違っていました。
不等号が逆でした。
それから、
rs1.MovePrevious を実行する前に
rs1.MoveLast を実行する必要が有ります。
なぜなら、上記のSELECT文を実行すると、抽出されるレコードはカレントレコードから前の全てのレコードとなり、カレントは先頭に設定されてしまいます。
従って、ここでMoveLastを実行して、カレントを検索されたレコードの最後のレコードに移動させることにより、始めてMovePreviousが有効になります。
きっと初歩的な問題だったと思われますが、ご迷惑をお掛けし申し訳有りませんでした。
すみません、誰か教えてください。
selectで重複するレコードを選択しないSQL文を知りたいです。
distinct row とかそうだったような気がするのですが。。。
select distinct 列名
でOKです。
はじめまして。
仕事時間外で会社のSQLServerを触らせてもらっていまして、
初めてSQLをMS SQLServer6.5でやっています。
通常はAccessを使っていて、少しモジュールが書ける程度です。
それで質問です。
素人質問なのですが、SQLServerのテーブルの列を
削除しようとして以下の文を書いたのですがエラーが
出てしまいました。
ALTER TABLE TableA DROP Field1
エラーは「制約を削除できません。」と言われました。
どうすればいいのでしょう?
削除しようとしたテーブルに
参照整合性制約でもついてるのでは
ないでしょうか。
> 削除しようとしたテーブルに
> 参照整合性制約でもついてるのでは
> ないでしょうか。
レス、感謝します。
ごめんなさい。参照整合性制約とはなんでしょうか?
参照整合性制約とは
例えば
テーブルBのある列がデータの間違いが
ないようにテーブルAのある列を参照させて、
テーブルAの列に存在しないデータは
テーブルBのある列に入れられないようにする
仕組みです。
この参照整合性制約を両テーブル間に
つけている場合、ここでテーブルAの参照列を
消そうとすると、その列はテーブルBの列が
参照しているので消せません。
これが参照性合成制約の簡単な説明です。
分かりやすく説明したかったけど、
ちょっとわかりづらいでしょうか・・・。
iwaさん、ありがとうございます。
Accessでいうリレーションをしたときの参照整合性
のことと同じことですね。
だとしたら、参照整合性制約の設定はしていないと思います。
元はAccessで作ったテーブルをアップサイジングしたのですが、
そのテーブル自体リレーションはされていなかったです。
miya
参照整合性制約でなければ、
削除しようとしている列が
主キーの列であったり、ユニークな
値を持つよう設定されている列だったりしてませんか?
> 参照整合性制約でなければ、
> 削除しようとしている列が
> 主キーの列であったり、ユニークな
> 値を持つよう設定されている列だったりしてませんか?
Access上ではIDを符番するためのマスタテーブルでした。
Table構成はField1のみです。
SQLServerへアップサイジングした際、うっかりフィールドを
追加してしまい、Table構成がField1 Field2となってしまいました。
で、Field2を削除しようとしたらできなかったのです。
> Access上ではIDを符番するためのマスタテーブルでした。
> Table構成はField1のみです。
> SQLServerへアップサイジングした際、うっかりフィールドを
> 追加してしまい、Table構成がField1 Field2となってしまいました。
> で、Field2を削除しようとしたらできなかったのです。
本来Field1しかなかったテーブルにField2をつけてしまった
わけですよね。
一番最初の質問ではField1を削除しようとしてたように
見えるのですが、Field2を削除しようとしてるのですか?
もう一度確認していただきたいのですが、
Field1 Field2 それからテーブルに本当になんの制約も
キーもつけていないのか確認していただけますか?
> 本来Field1しかなかったテーブルにField2をつけてしまった
> わけですよね。
> 一番最初の質問ではField1を削除しようとしてたように
> 見えるのですが、Field2を削除しようとしてるのですか?
すいません。誤解を招く説明をしていました。
削除しようとしたのはField2です。
> もう一度確認していただきたいのですが、
> Field1 Field2 それからテーブルに本当になんの制約も
> キーもつけていないのか確認していただけますか?
Enterprize Manegerのテーブルにある<一意制約>、<チェック制約>
というところをみたのですが、空白でした。
すいませんこんな質問に付き合って頂いて...。
sp_help というコマンドがあったので使ってみましたら、
「オブジェクトは印でデックスを持っていません。」
「このオブジェクトには制約が定義されていません。」
「このテーブルを参照している外部キーはありません。」
とメッセージがでました。
ちなみに、オブジェクトとはフィールドのことでしょうか?
ためしにEnterprize上でSQL文でテーブルを作成して、
その後フィールドを削除してみました。
が、ダメでした。
==============================
テーブル作成
Create Table tstTB
(fld1 int,
fld2 int)
テーブル削除
Alter Table tstTB Drop fld2
==============================
ただ今SQLサーバをいじれる環境だったので調べてみました。
SQL文が間違っている可能性があります。
alter table テーブル名 drop column フィールド名
で実行してみてください。
> ただ今SQLサーバをいじれる環境だったので調べてみました。
> SQL文が間違っている可能性があります。
>
> alter table テーブル名 drop column フィールド名
>
> で実行してみてください。
上記の文章はすでにやっていまして、
エラーメッセージは「'フィールド名'の近くに不正な構文があります。」
と言われます。
Alter Table テーブル名 drop フィールド名だと
「制約を削除できませんでした。」
といわれるので、素人の私としては後者のエラーメッセージの方が
近づいている?気がしています。
7.0でのマニュアルなので6.5での保証はしませんが、
列の削除は「column」が必要です。
「column」を入れない場合は制約の削除と見なされ
「制約を削除できません」というメッセージがでるのです。
(7.0でも同様のメッセージ出現を確認済み。)
「'フィールド名'の近くに不正な構文があります。」
とメッセージが出たということは単に文法が間違っていたか、
6.5では列削除のSQLは対応してないかのどちらかの可能性が
あります。
もう一度ご確認ください。
> 7.0でのマニュアルなので6.5での保証はしませんが、
> 列の削除は「column」が必要です。
ということは7.0では削除ができるのですね。なるほど。
> 「column」を入れない場合は制約の削除と見なされ
> 「制約を削除できません」というメッセージがでるのです。
> (7.0でも同様のメッセージ出現を確認済み。)
> 「'フィールド名'の近くに不正な構文があります。」
> とメッセージが出たということは単に文法が間違っていたか、
> 6.5では列削除のSQLは対応してないかのどちらかの可能性が
> あります。
> もう一度ご確認ください。
列削除が対応していない可能性もあるんですか!
そこまでは考えていませんでした。どちらにしろもう少し確認してみます。
質問の方はもう充分すぎるほど付き合って頂いたので、ひとまず終わり
にします。
済みません、長いことつまらない質問に付き合って頂いて。
本当にありがとうございました。
今度はもう少しまともな質問をします。
では。
題名つけるの忘れてました。
失礼しました。