◆My Oracle Support ttp://support.oracle.com/ 0687NAME IS NULL2023/01/21(土) 15:36:12.78ID:W/7tJ9Sa>>686 はあ? 0688NAME IS NULL2023/01/21(土) 15:37:29.54ID:W/7tJ9Sa>>686 DBMSの選定で機能比較をしたことがあるのか? ないからそんなことが言える。 0689NAME IS NULL2023/01/21(土) 21:00:31.30ID:??? Oracle だけじゃないけど SQL-Server 使ってると order by ~ nulls first は欲しいと思う 逆にちょっとした値を直書きしたい時に Oracle だと select ~ from (VALUES (1, 'one'), (2, 'two'), (3, 'three')) as t (num,letter); ってできないのが不満だわ 0690NAME IS NULL2023/01/21(土) 23:12:57.75ID:W/7tJ9Sa>>689 SQL Serverは文字の照合順序が指定できる。
そうしなくてもUNION ALLでNULLレコードを最初に持ってくるか最後に持ってくるかをSELECT文で指定できる。 0691NAME IS NULL2023/01/21(土) 23:19:08.33ID:W/7tJ9Sa>>689 ORDER BYの仕様は、OracleDBがNULLをNULL値と定義したおかげ。
キャラクタセットと文字の照合順序をORDER BYに絡ませた他のRBDMSは、性能を優先したせいで面倒な比較条件、ソート条件が仕様として残ってしまった。 0692NAME IS NULL2023/01/23(月) 20:24:57.70ID:???>>689 order by のNULLの順序は確かに指定したいときはままあるんだが、 ソートしたい項目にNULLが入ってる段階で設計間違ってる気がしないでもない
>>690-691 NULLは別に文字に限った話じゃないんだが? ちなみに >UNION ALLでNULLレコードを最初に持ってくるか最後に持ってくるかをSELECT文で指定できる。 これどうやるんだ?NULLレコードってなんだ? 0693NAME IS NULL2023/01/23(月) 20:36:47.29ID:???>>692 > ソートしたい項目にNULLが入ってる段階で設計間違ってる気がしないでもない left join の結果とかで null をどっちかに寄せたいとか
・データ ID 巻数 タイトル 1 第1巻 あいうえお 2 第2巻 かきくけこ 3 第3巻 さしすせそ ------------ このテーブルでInsert文作りたいのですが、 ID、Numberが+1ずつしていく場合、タイトル以外を自動加算させる書き方ってありますか? ------------ Insert Into テーブル (ID,Number,Title) Select MAX(ID)+1, 第???回, たちつてと From テーブル ------------ この 第???回 がわからず。。 0695NAME IS NULL2023/01/24(火) 01:03:41.31ID:CDmns3ou>>692 ソートしたカラムにNULLのレコードがあると彼は言っている。
select aaa from abc where aaa = b and aaa is not null order by aaa union all select aaa from abc where aaa = b and aaa is null; 0696NAME IS NULL2023/01/24(火) 01:04:41.14ID:CDmns3ou>>694 PL/SQLでやればいい 0697NAME IS NULL2023/01/24(火) 01:06:05.17ID:CDmns3ou>>694 select max(id) だけでも破綻しているぞ? 0698NAME IS NULL2023/01/24(火) 11:44:08.22ID:???>>695 そのSQL通るのか? すくなくともSQL Serverではunionに指定できるorder byは最後に指定して全体に適用されるものだけのはずだが サブクエリでTopとか使うなら個別のorder byは有効かもしれんが unionした結果の行の順番は(全体としてのorder byがなければ)保証されないと思うが
ORACLEならそれで全体の順序が保証されるってなら、根拠となる資料教えてくれ 0699NAME IS NULL2023/01/24(火) 13:01:51.57ID:??? 保証されるわけない ちなみにオラクルでは個別のorder byも書けない 0700NAME IS NULL2023/01/25(水) 00:21:18.55ID:???>>694 INSERT INTO ~ SELECT MAX(ID) + 1 …の形だと同時実行されたらダメじゃね? 他のDBMSと違ってオラクルだとSERIALIZABLEでもwrite skewが発生する 0701NAME IS NULL2023/01/25(水) 13:44:05.91ID:???>>700 さすがにSERIALIZABLEでそんなことが起こったらダメだろうと思うんだが WikiのSnapshot isolation のとこ見ると >Oracle は snapshot isolation のことを "serializable" と呼んでいる って書いてあるな
今回の例なら素直にシーケンス使えで良いかもしれんが トランザクション設計ちょっと考えんといかんな
どおりでみんなやたらにfor update書くわけだ 0702NAME IS NULL2023/01/25(水) 15:22:11.85ID:??? オラクルでgap freeなシーケンスって存在する? 0703NAME IS NULL2023/01/25(水) 17:59:27.93ID:???>>700 同時実行とか関係なく単にデータを生成したいだけかもしれない 0704NAME IS NULL2023/01/25(水) 23:07:49.88ID:YToOJ4zV>>698 unionとunion allはまったく別物 0705NAME IS NULL2023/01/25(水) 23:18:07.37ID:YToOJ4zV>>698 select句に対して、ひとつのorder by句が対応するという構文の仕様があるが、select文のfrom指定をインライビュー(副問い合わせ)にすれば問題ない。
副問い合わせは、現在ではあたりまえの拡張構文だけど、古い仕様があるから、わさわざ2段階にしないといけないだけ。 0718NAME IS NULL2023/01/26(木) 14:45:43.06ID:0ZdAuIEw>>716 製品マニュアルのSELECT文の構文部分を読め 難しいだろうから、しばらくは暇つぶしになるだろう。 0719NAME IS NULL2023/01/26(木) 14:49:05.23ID:0ZdAuIEw>>716 まずは冷静に読みなさい。 間違えたもの訂正したから、訂正部分をスルーしたのは私の書き方が悪いのもあるが、特定厨のくせにちゃんと見てないあなた様をちょっとおかしい。 0720NAME IS NULL2023/01/26(木) 14:52:21.72ID:0ZdAuIEw このスレは機能不全になったな。 データベース板はどのスレも書き込みがあると、他人の書き込みのアラ探しをする無職がいるようだ。
OTNの掲示板が機能していた時代でも、ネットで質問して返ってくる内容なんて変なのばかりだったぞ。
匿名をいいことに他人の書き込みをいちいちギャーギャー言うのは、本当にタチが悪い。 0721NAME IS NULL2023/01/26(木) 15:11:59.93ID:???>>718-719 ドヤ顔で頓珍漢なトランザクションのURL示せるんならselectの説明してるURL示せよ 0722NAME IS NULL2023/01/26(木) 15:22:22.59ID:0ZdAuIEw 最初に言った人がORDER BYでNULLを最初か最後かに指定できないと言ったのを、そういう仕様だったかなと思ったしまっていた
よく考えたら、OracleDBでもちゃんとNULLの並び順の指定方法があることを思い出したよ。
ORDER BY句に下記のものを書けば、NULLのカラムが最後にくるか、最初にくるか指定できる
NULLS LAST NULLS FIRST 0723NAME IS NULL2023/01/26(木) 15:27:44.63ID:???>>717 >select文のfrom指定をインライビュー(副問い合わせ)にすれば問題ない。 つまり>>695のSQLは間違ってるんだな じゃあまず正しいSQL示せ
その上で副問い合わせで指定した順序が最終の結果セットで保持されている根拠を示せ? 0724NAME IS NULL2023/01/26(木) 15:29:45.58ID:0ZdAuIEw>>723 インラインビュー内のSELECT文のソートは標準SQLで決まっているので、OracleDB固有の仕様ではない。
まあ >ネットで質問して返ってくる内容なんて変なのばかり そう思うならお前は回答するな 0727NAME IS NULL2023/01/26(木) 15:34:10.33ID:0ZdAuIEw ああそう 0728NAME IS NULL2023/01/26(木) 15:34:46.93ID:???>>722 >SQL-Server 使ってると order by 〜 nulls first は欲しいと思う に対して >UNION ALLでNULLレコードを最初に持ってくるか最後に持ってくるかをSELECT文で指定できる。 って解答がそもそもの発端なんだが、これお前の発言じゃないのか? 0729NAME IS NULL2023/01/26(木) 15:35:16.15ID:0ZdAuIEw>>726 データベース板は過疎板なんだけどな 0730NAME IS NULL2023/01/26(木) 15:36:44.39ID:0ZdAuIEw>>728 そうだったね。勘違いした。
Oracle だけじゃないけど SQL-Server 使ってると order by ~ nulls first は欲しいと思う 逆にちょっとした値を直書きしたい時に Oracle だと select ~ from (VALUES (1, 'one'), (2, 'two'), (3, 'three')) as t (num,letter); ってできないのが不満だわ 0731NAME IS NULL2023/01/26(木) 15:40:38.39ID:???>>724 標準SQLではインラインビューにORDER BYは書けなかったはずだが ちなみに、どのレベルの標準SQLだ? 標準SQLの規格書手元にないから、書けるって根拠があるなら教えて 0732NAME IS NULL2023/01/26(木) 15:41:35.97ID:0ZdAuIEw>>728 SQL Serverの場合はunion allするselect文のfrom句に副問い合わせのselectでorder byができる。