のように結合したいのですが、どのようなSQLにすればよいのでしょうか 表は三つあるのですが、どこがデータ量が一番多いのかはわかりません 0576NAME IS NULL2017/09/21(木) 06:28:30.84ID:???>>575 FULL OUTER JOIN 0577NAME IS NULL2017/09/22(金) 14:44:50.06ID:??? テーブルレイアウトも結合条件も解らんのだが 0578NAME IS NULL2017/09/22(金) 15:23:28.44ID:ztnwHSNR 推測するに各テーブルがカラム1個で、 全データを列挙したいんじゃ? 0579NAME IS NULL2017/09/22(金) 19:55:55.00ID:??? つまり、こういうことか? select 表1.カラム1,表2.カラム1,表3.カラム1 from (select カラム1 from 表1 union select カラム1 from 表2 union select カラム1 from 表3) t left join 表1 on 表1.カラム1= t.カラム1 left join 表2 on 表2.カラム1= t.カラム1 left join 表3 on 表3.カラム1= t.カラム1 0580NAME IS NULL2017/09/27(水) 21:42:06.33ID:??? SQL Server 2014 で教えてください。
1) select * from tableA join tableB; や select * from tableA left join tableB; と書いた場合、上は inner join、下は left outer join と同等でしょうか。 引き継いだコードが上のように書いてあるのですが、join で検索を掛けても inner join とかの記事しか出てこず。
2) テーブルから特定の値のレコードを検索する場合、 a) 検索したい値を格納した(一時)テーブルと結合する select * from tableA t1 inner join tableB t2 on t1.id = t2.id; など /* tableB に欲しいレコードの id を格納しているとします */ b) where で in を使用して検索したい値を列挙する select * from tableA t1 where id in (/* 欲しいレコードの id を列挙 */) などの方法があるように思います。
そもそも普通に order by num asc を追加しとけばいいだけじゃないの? 0586NAME IS NULL2017/10/10(火) 08:36:52.44ID:oX0yCwR9 でたらめアドバイスだらけだが、OracleのFROM句の副問い合わせは、インラインビューと呼ばれ、並び替えも含めてインラインビューの結果そのものを、再度、検索する。
確かに、リファレンスにもROWNUMにasで別名を付けるソースではないんですよね… ただ、既に稼働しているシステムのソースがROWNUM別名形式でして、弄くる箇所は最小限にしたいなあ、と。 0589NAME IS NULL2017/10/10(火) 09:48:36.37ID:oX0yCwR9>>588 そもそもrownumをSELECT句に挙げる慣習はOracleにはない。
最近、SELECT句で選択していない項目は条件で使えないと思っていたベテランがいたがw 0590NAME IS NULL2017/10/10(火) 12:27:45.02ID:??? 何でrow_number関数使わないのか 0591NAME IS NULL2017/10/10(火) 13:02:37.26ID:??? 既に稼働しているシステムのソースをなるべく弄らない方針にすると 負債がどんどん貯まっていって見るのも嫌になるのでおすすめ 0592NAME IS NULL2017/10/10(火) 15:19:43.61ID:mDt5cW24>>583 外側のクエリでサブクエリの並び順を変更する要素がなければ、サブクエリの並び順のまま出力されるけど、それは現状の実装がそうなってるだけ
外側にもサブクエリと同じorder byを付けとけばオプティマイザが2回目のソートは不要って判断してくれるから心配なら付けといて損はない 0593NAME IS NULL2017/10/10(火) 16:01:13.47ID:mDt5cW24 ちょい古いけどこの辺見るといい https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:11376891003462459720594NAME IS NULL2017/10/10(火) 16:50:27.19ID:oX0yCwR9>>592 それはおかしい。 間違いは素直に認めろ。 0595NAME IS NULL2017/10/10(火) 16:51:41.65ID:oX0yCwR9 インラインビューをサブクエリとわざわざ曖昧にしてるあたり分かっているとは思えない。 0596NAME IS NULL2017/10/10(火) 16:55:22.20ID:oX0yCwR9>>590 row_numberは記述が冗長になるのと、機能を拡張しすぎていてかえって分かりにくくなってしまう。 0597NAME IS NULL2017/10/10(火) 17:00:42.30ID:oX0yCwR9>>592 あなたはrownumはフェッチ時に番号が振られるのを理解してないのだと思う。
番号を付けるときにorder by rownumしても何の意味もない。 0598NAME IS NULL2017/10/10(火) 17:11:36.33ID:mDt5cW24>>597 アウターにorder byがなくてもオラクルが順序を保証してくれると主張してるの? 最低限、何を主張したいのか分かるように書いてくれる? 0599NAME IS NULL2017/10/10(火) 17:13:18.53ID:???>>596 Oracle方言よりANSI SQL使うに越したことはない 0600NAME IS NULL2017/10/10(火) 17:27:02.97ID:oX0yCwR9>>598 rownumという列があるわけではない。
並び順はorder byを指定しないかぎりは保証しないというSQLの規格とは関係ない。
Oracleは内部的なことをSQLに書いているだけで、SQL ServerのTOP関数も内部では二度SELECTしていることが多い。 0601NAME IS NULL2017/10/10(火) 18:06:03.05ID:mDt5cW24>>600 で? 保証してくれるの?してくれないの? 0602NAME IS NULL2017/10/10(火) 18:54:06.50ID:oX0yCwR9 rownum絡みの仕様変更はずっとアナウンスされていない。 0603NAME IS NULL2017/10/10(火) 19:16:30.46ID:??? Qに対してのAが帰ってこないとはこの事だ 0604NAME IS NULL2017/10/10(火) 20:57:29.86ID:??? order byがなければ順序は保証しないとマニュアルに明記されているにも関わらず rownum使ったtop-N最適化のケースは例外的に順序が保証されると言うならその根拠が必要だよね 0605NAME IS NULL2017/10/10(火) 21:07:48.37ID:oX0yCwR9 どういう思い込みなのか、rownumの変な使い方にこだわって、やってもかまわないが、変な人を貫きたいというので答えたのにな。
so, while I cannot imagine select rownum, x.* from (select ... order by ... ) x not being sorted by rownum (by the order by), it is permitted to not be sorted.
... Why would it be permitted not to be sorted? ... because there is no order by on the outer query. that is why.
レコードに位置の概念があったり、位置の概念がないと思いながらもソートがいきなりできると思い込むITオンチと話すときりがない。 0633NAME IS NULL2017/10/11(水) 17:28:00.59ID:??? 誰でも知ってることをドヤ顔で永遠と書いた挙句に最後は八つ当たりww 0634NAME IS NULL2017/10/11(水) 17:29:56.92ID:f/rcAUbh>>631 それは構文がそう見えるだけだろうが。
rownumの値は副問い合わせの結果で、かつrownumは主問い合わせの取得順。
Oracleの構文になんでそんなに文句があるのか。
外国人はデタラメが多いから気をつけろよ。 0635NAME IS NULL2017/10/11(水) 17:31:15.35ID:f/rcAUbh>>633 どうもスルー力がないようですね。 0636NAME IS NULL2017/10/11(水) 17:33:11.25ID:??? 構文にじゃなくてお前に文句があるだけでは 0637NAME IS NULL2017/10/11(水) 17:36:44.50ID:f/rcAUbh 実際にこの話題は仕事でも若い人ほど、標準SQLが先にあって、OracleがそのSQLの仕様に沿って作られていると勘違いしているのか、引っかかって面倒なんだよな。
最近もSQLはこう書くとこうなるみたいな話をデータベースに詳しくない人間が言い始めると、面倒だからそれに従うしかない。 0638NAME IS NULL2017/10/11(水) 17:38:22.42ID:f/rcAUbh 批判されていると思い込む恐怖心はわかるが、ネットとはこういうところです。 0639NAME IS NULL2017/10/11(水) 17:47:01.74ID:??? 批判されてるのもお前では 0640NAME IS NULL2017/10/11(水) 18:02:51.58ID:??? >rownumは主問い合わせの取得順 これは間違いないんだが、その肝心の主問い合わせの取得順が 副問い合わせのORDER BY順にならなければトップn取れないわけだが (最終的な出力順はその通りとは限らんでも良いけど)
これがORACLEでは保障されてるってなら マニュアルのどこに書いてあるか言えばいいだけなんだがな
ORACLEには仕様ではないが過去の実装からそうだと決めつけられてることが結構あって ORACLE自身も影響範囲がでかすぎて、おいそれと変更ができなくなってる これもその一つだと思うけどね 0641NAME IS NULL2017/10/11(水) 18:12:59.37ID:??? やりとり見てないまま横から失礼だが 普通は row_number() over 〜 使うんじゃないの 0642NAME IS NULL2017/10/11(水) 18:18:20.51ID:???>>640 top-N集合の取得は保証されてるよ それはリファレンスのrownumのところ読めばわかるじゃん 0643NAME IS NULL2017/10/11(水) 18:48:25.70ID:???>>641 そうね 今はfetch first/next使う 0644NAME IS NULL2017/10/11(水) 19:56:15.09ID:??? どうでも良いからOracleのスレでやれって アフォどもが 0645NAME IS NULL2017/10/11(水) 21:34:43.34ID:f/rcAUbh ソート条件のあるカーソルでフェッチ順がソート条件通りにならないという主張はただの知識不足としか思えない。 0646NAME IS NULL2017/10/11(水) 21:40:14.45ID:f/rcAUbh>>640 なんでオラクル社の説明をねじ曲げて解釈するのか?
例のrownumの件は、ドキュメントでも主問い合わせのrownumは、副問い合わせの結果が値で、主問い合わせの疑似列であると説明している。 0647NAME IS NULL2017/10/11(水) 21:40:16.53ID:9hHhkBSp>>645 もうやめたら?言えば言うだけバカがよけいにムキになるだけだぞw 0648NAME IS NULL2017/10/11(水) 21:42:53.00ID:f/rcAUbh>>647 SQLは仕事上、間違いを主張しまくる人間が多いから、ここでもとにかく誤りを正さないと生活がめちゃめちゃになる。 0649NAME IS NULL2017/10/11(水) 21:51:37.74ID:???>>646
>>623でオラクルのエンジニアが並び順は保証されてないとハッキリ言ってるじゃん 彼が間違ってて君が正しいと言える客観的根拠が全く提示されないから説得力ゼロ 今のところ”ソースは俺の頭の中(キリッ”な状態 0650NAME IS NULL2017/10/11(水) 21:53:42.91ID:???>>645 君以外誰一人としてカーソルのフェッチについての話なんてしてないよ 0651NAME IS NULL2017/10/11(水) 22:03:53.96ID:9hHhkBSp ああなるほど、いかにもバカらしい勘違いだなw 0652NAME IS NULL2017/10/11(水) 22:21:29.26ID:??? 典型的な老害 0653NAME IS NULL2017/10/11(水) 22:25:26.59ID:f/rcAUbh>>650 SQLが何なのかわかってない。いい加減にしろ。 0654NAME IS NULL2017/10/11(水) 22:27:41.07ID:f/rcAUbh>>649 その人が間違ってるのに、なぜオラクルエンジニアの私が間違ってると決めつけられなきゃいけないのか? 0655NAME IS NULL2017/10/11(水) 22:31:39.23ID:???>>646 主問い合わせのrownumは主問い合わせのフェッチ順のはずで >副問い合わせの結果が値 なのは、「主問い合わせのフェッチ順が副問い合わせのorder by順」な結果に過ぎないんじゃね で、今問題なのは 「主問い合わせのフェッチ順が副問い合わせのorder by順」 なのは実装なのか仕様なのかって話なんだが (主問い合わせの出力順が主問い合わせのフェッチ順通りかどうかは別の問題)
ま、どっちにしても個別DBMSの話だから続きはオラクルスレでやってくれればいいけど 0656NAME IS NULL2017/10/11(水) 22:37:12.18ID:f/rcAUbh 不思議なのは、Oracleがインラインビューにorder byの仕様をあとから追加して並び順を付けたのに、なぜ並び順が不定と言い張っているのか?