トップページ⇒tech
1001コメント347KB

SQL教えて〜!! <2>

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
ということで、賛否両論でしたがたてますた

前スレ
SQL教えて〜!!
http://pc3.2ch.net/test/read.cgi/tech/1000116969/l50

関連スレは>>2-3
00021NGNG
データベース Part2
http://pc3.2ch.net/test/read.cgi/tech/1020158297/l50

【ノウ】DBアプリ開発ノウハウ【ハウ】
http://pc3.2ch.net/test/read.cgi/tech/1015807409/l50

★★★ SQLサーバ VS オラクル ★★★
http://pc3.2ch.net/test/read.cgi/tech/1008908462/l50

oracle質問
http://pc3.2ch.net/test/read.cgi/tech/1010400855/l50

Access使い集合!
http://pc3.2ch.net/test/read.cgi/tech/1005078204/l50

MySQLってどうよ
http://pc3.2ch.net/test/read.cgi/tech/1008316065/l50

InterBaseを使いこなすスレ
http://pc3.2ch.net/test/read.cgi/tech/1015250429/l50
00031NGNG
WebProg板の関連スレ

PostgreSQL
http://pc.2ch.net/test/read.cgi/php/989375812/l50

PHP + PostgreSQL
http://pc.2ch.net/test/read.cgi/php/983128806/l50

PHP + MySQL
http://pc.2ch.net/test/read.cgi/php/983250751/l50

MySQL vs PostgreSQL
http://pc.2ch.net/test/read.cgi/php/989341364/l50
0004デフォルトの名無しさんNGNG
おちかり
0005デフォルトの名無しさんNGNG
UNIX板にもある。
PostgreSQL or MySQL
http://pc.2ch.net/test/read.cgi/unix/955533785/
0006デフォルトの名無しさんNGNG
おつかれー。
質問スレは別にあった方がいいと思う。
0007デフォルトの名無しさんNGNG
質問です。
SQLの集計関数でGROUP BY
した時にグループ毎の小計を出したいのです。

MSSQLサーバなら
COMPUTEを始めとしていろいろ出来ますが
汎用的なステートメントはあるのでしょうか?

特にDB2で実現したいと思っています。

アドバイスよろしくお願いします。
0008デフォルトの名無しさんNGNG
>7
select grp_name, sum(column_name)
from table_name
group by grp_name

とかじゃなくて?
0009デフォルトの名無しさんNGNG
>>8
レスありがとうございます。

説明が足りなくて申し訳ありません。
ただ、私が期待している結果は集計行だけではなく、
例えば
prefect でグループ化をし

prefect name salary
-----------------------
tokyo aa 120
tokyo bb 60
tokyo cc 130
tokyo 310 ←ここに小計をいれたい
tiba dd 30
tiba ee 110
tiba 11 30
tiba 170←ここに小計をいれたい
....

という感じにしたいのです。
引き続きアドバイスよろしくお願いします。
0010apholistNGNG
>>9
そんなことできるDBがあるのね。しらんかった。

個人的には集計関数使うよりはデータだけ引っ張ってきて
プログラムの方で集計するほうが好みなんだけど。
アクセス数によるけど、DB側の処理は軽いほうがいいと思う。
0011デフォルトの名無しさんNGNG
>>9
rollupとかcubeですね。使えるみたい。
http://www-6.ibm.com/jp/software/data/developer/library/manual/db2online/db2y0/frame3.htm#db2y045
0012デフォルトの名無しさんNGNG
DB2でもROLLUPとかCUBE使えるようですね。ありがとうございました。
0013デフォルトの名無しさんNGNG
1999年1月のデータを取得したい場合、WHEREはどのように記述するのですか?

DATE ? '1999-01'

0014デフォルトの名無しさんNGNG
>>13
使ってるRDBMSによる。

DATE < '1999-02-01' and DATE >= '1999-01-01'

でRDBMSによっては動くかもしれない。またDATEから組み込み関数を
使って年と月を取り出して比較したりいろいろ方法はあるが、組み込み
関数を使うとインデックスが効かなくなる場合もあるので注意。
001513NGNG
>>14
ありがとSUN
やっぱり日付こみで指定しないと駄目か
0016デフォルトの名無しさんNGNG
>14
>関数を使うとインデックスが効かなくなる場合もあるので注意。
そーそーこの間これでパフォーマンスがぼろぼろだったです。
SQL厨ですが、とりあえず逝って来ます。
0017デフォルトの名無しさんNGNG
すいません。教えてください。
九月の頭から業務でSQLを使用することになりました。
全くと言っていいほど知識がありません。。。
SQLはどのくらい難しいのでしょうか?
0018デフォルトの名無しさんNGNG
>>17
素晴らしく漠然とした質問だなオイ!
0019デフォルトの名無しさんNGNG
>>18
べつにいいじゃん。そんなことより
激しくすれ違い
0020デフォルトの名無しさんNGNG

SQL Server7.0/2000 を使用しています。
こういうことはできますか?

テーブル A
ID  Name1
----------
1   a
2   b
3   c

テーブル B
ID  Name2
----------
2   x
3   y
4   z

このとき、以下のように結合したいのです。
ID  Name1   Name2
------------------
1   a     <NULL>
2   b      x
3   c      y
4   <NULL>  z


ちなみに
select *
from A full join B
on A.ID=B.ID
としたら、
ID   Name1  ID   Name2
----------------------------
1     a   <NULL>  <NULL>
2     b     2     x
3     c     3     y
<NULL> <NULL> 4     z

となってしまうのですが、ID を1列にまとめたいのです。
何かよい方法はありますか?

0021デフォルトの名無しさんNGNG
SQL Server7.0/2000はやったことない環境なので実際に試せないけど、

select NVL(A.ID, B.ID), Name1, Name2
from A full join B
on A.ID = B.ID

でできないかな?

NVL()があるかどうかわからないので一応関数の仕様。
引数1がNULLだったら引数2の値を返す関数。
0022デフォルトの名無しさんNGNG
>>21
俺は20じゃ無いがあんたは紙だとおもふ

select coalesce(tab1.ID,tab2.ID) id,name1,name2
from tab1 full outer join tab2 on tab1.ID = tab2.ID
order by id

で、できますた。
SQL Server2000で確認済み

NVLって事はオラクルだとおもうけど、それって
9iじゃないと出来ないよね。8i以前はどうしていたんだろう・・・・


0023デフォルトの名無しさんNGNG
>>22

select ID, max(name1), max(name2)
from (
select ID, name1, null name2 from A
union all
select ID, null name1, name2 from B
)
group by ID

full outer joinの実行計画ってどうなるんだろ?
002420NGNG
>>21 >>22
ありがとう!
なるほど、今 SQL Server2000 の BooksOnline 見てたら
ISNULL 関数というのもありますね。
うれしい、どうも!
0025デフォルトの名無しさんNGNG
>>24
標準はcoalesceだから特に理由がなければそっちを使っとけ
0026デフォルトの名無しさんNGNG
select (CASE の複雑な式) AS Code1, Left(Code1, 2) as Code2
from table1

しかしこれはエラーです。(Left 関数の「Code1」の箇所で)

Code2 として Code1 の左二桁をとりたいのだが、
どうすればよいのか??
なんども (CASE の複雑な式) を書かないとだめでしょうか。
(SQL Server2000 使用です)
0027デフォルトの名無しさんNGNG
パパだってママの母乳が飲みたいんだよ、トローリ初乳チュパチュパ画像
http://jbbs.shitaraba.com/computer/bbs/read.cgi?BBS=2784&KEY=1029503890&LAST=100

0028デフォルトの名無しさんNGNG
初心者質問なのですがSQLでJOINを使ってファイルを繋げば繋ぐほど処理速度はヤパーリ遅くなりますか?WHERE条件は引っ掛かるのが多い条件を先に書いた方が早いのでしょか?
0029デフォルトの名無しさんNGNG
>>26
本当に何度も書く、かつ汎用的ならユーザー定義関数を使うと吉。
003026NGNG
>>29
ども!
ユーザー関数考えて見ます。
0031デフォルトの名無しさんNGNG
>>28
 その通りです
 あと、From句のテーブルを書く順番も結構、速度が変わってくるので
 取得データ・テーブル構成等を考えて指定してみてください
0032デフォルトの名無しさんNGNG
SQLやORACLEを学ぶのに皆様どうやっていますか。
またいい教材があったら教えてください。
0033別スレに誤爆していました(涙NGNG
Oracle使うときにはObjectBrowserっていう便利なソフトがありますが
SQLServerは使えませんでした。
SQLServer用の同様の便利なソフトってどんなのがあるのでしょうか?
0034デフォルトの名無しさんNGNG
>>33
標準のGUIツール(エンタープライズマネジャ、クエリーアナライザ)では
ダメですか?
仕事の便宜を考えたら、DB設計書 ←→ T-SQL
変換のスクリプトとかは作っておくと便利だと思います。
たぶん、ベンダー製品にもそうした機能のアプリはありそうです。
DBマガジンあたりを読んでみてはどうでしょうか。
0035デフォルトの名無しさんNGNG
Win32::ODBCでSqlメソッドでにてSQL文を実行したあとにフェッチしても
値を得られないのですが(SQLクエリを直接実行してみるとうまくいきます)
Dumpしてみると
Dumping Data for connection: 2
と出ます。考えられる原因を教えてください。
003621NGNG
>22
漏れはSQL厨だよー。

8i以前はDECODE(data, compression1, result1, [compression2, result2, ..., compressionN, resultN], default)ってのがあるよ。
dataがcompression1ならresult1を、
compression2ならresult2を、
compressionNならresultNを、
それ以外はdefaultを返す。

>22を書き換えると
select decode(tab1.ID, NULL, tab2.ID, tab1.ID) id,name1,name2
になる。

DECODEが長くなるならストアドファンクションにしたほうが吉。
003722NGNG
>>36=21
そんだけ知っててSQL鯖専門かいな
俺はどっちかといえば、Ora専門のつもりだったんだが・・・・
とはいっても、DBA関係から入ってOraで開発やりてーって、
上司に交渉中の身なんだがな。

>>23のもちょっと考えたあとに納得できて
ふぅーんと思っていたが、>>36のはより直感的で
漏れのような超甘にはピッタリだつだよ

ということで、俺の中であんたは髪決定!!!

あぁ、入社5年目開発未経験なバカでも
Oraで開発やらせてくれる会社ないかなぁ。。。
0038デフォルトの名無しさんNGNG
Table A
shopid shopname
001東京
002茨城
003埼玉

Table B
No shopid1 shopid2 shopid3
1 001 002 0003
2 001 0002
3 001 0002

出力
No shopid1 shopname shopid2 shopname shopid3 shopname
1 001 東京  002 茨城  003 埼玉
2 - - 001 東京  002 茨城
3 001 東京   - - 002 茨城

TableAとTableBから、
こんな表を出力したいのですがうまくいきません。
どうすればよいでしょうか?

0039デフォルトの名無しさんNGNG
現在どんなふうにやっていて、何がどううまくいかないのかくらい書けやゴルァ
0040デフォルトの名無しさんNGNG
用事があったもので亀レスすまそ。
ちなみにこんな感じで考えますた。
select b.shopid1,a.shopname,b.shopid2,a.shopname,b.shopid3,a.shopname
from b left outer join a on
b.shopid1=a.shopid or b.shopid2=a.shopid or b.shopid3=a.shopid
結果はこうなりますた。
No shopid1 shopname shopid2 shopname shopid3 shopname
1 001 東京  002 東京  003 東京
1 001 茨城  002 茨城  003 茨城
1 001 埼玉  002 埼玉  003 埼玉
2 - 東京  001 東京  002 東京
2 - 茨城 001 茨城  002 茨城
うーん。1回では無理?
004121NGNG
>37=22
ありがとん。
SQL鯖専門ではなくて、Sybaseもやったことあるです。
でも今はOraで開発。


>38
試してないけど多分これで。

select No,
    shopid1, DECODE(shopid1, NULL, '--', A.shopname),
    shopid2, DECODE(shopid2, NULL, '--', B.shopname),
    shopid3, DECODE(shopid3, NULL, '--', C.shopname)
from  Table_B,
    Table_A A,
    Table_A B,
    Table_A C
where shopid1 = A.shopid
and  shopid2 = B.shopid
and  shopid3 = C.shopid
0042デフォルトの名無しさんNGNG
>>38
外部結合まではいいが、
あとはエイリアスを使うべし。
SELECT B.No,
B.shopid1,A1.shopname,
B.shopid2,A2.shopname,
B.shopid3,A3.shopname
FROM ( (B LEFT OUTER JOIN A as A1 ON B.shopid1 = A1.shopid)
    LEFT OUTER JOIN A as A2 ON B.shopid2 = A2.shopid )
  LEFT OUTER JOIN A as A3 ON B.shopid3 = A3.shopid

SQL92形式は結合評価順序を指定できても
ちょっと面倒だ。
0043デフォルトの名無しさんNGNG
>>41,42
ありが�d。
うまくいきました。
0044デフォルトの名無しさんNGNG
Data Between ○ And ●
Data >= ○ And Data <= ●

パフォーマンスがいいのはどっちだ?
0045デフォルトの名無しさんNGNG
>>44
一般的にはBETWEENと思われ
004644NGNG
>>45
早速ありがと。
その理由も知りたい。
0047デフォルトの名無しさんNGNG
>>44
 Data >= ○ And Data <= ●
 以上・以下の比較を入れると遅くなります
 例えば
 Data >= 2 And Data <= 5 の場合、
 Data > 3 And Data < 6 としたほうが速いです
004844NGNG
ちなみにdatetime型です。
0049デフォルトの名無しさんNGNG
>>46
わざわざBETWEENなんてものが用意されてる以上、
その処理も最適化されている可能性が高いだろうという推論
実測値を計ったわけじゃないので違ったらスマソ
005044NGNG
>>47
スマソ。
仕事しながらだとタイミングが合わん。

Data Between ○ And ●
Data > ○-1 And Data < ●+1
だとパフォーマンスがいいのはどっちなんでしょ?同等!?
0051デフォルトの名無しさんNGNG
>>50
自分で時間はかってみりゃいいじゃない
005244NGNG
>>51
「理由」がわからなくて気持ち÷い。
0053デフォルトの名無しさんNGNG
>>52
理由もくそも、まず計ってみたのかよ!?
大体DBなに使ってるかも書いてないし情報不足すぎ。
005447NGNG
>>50
 >>53さんのいうようにDBに何を使っているのかがわからないんですが、
 Oracleなら Set Timing on(off) とかで実行時間が測れたような気がするが・・・・
 
005544NGNG
>>53
すまんすまん。
DBは SQL Server だ。
時間計ってみた。

declare @a datetime
set @a = GetDate()
select *
from ◎
where ○ > '2000/03/31' And ○ < '2003/04/01'
print DateDiff(millisecond, GetDate(), @a)

set @a = GetDate()
select *
from ◎
where ○ Between '2000/04/01' And '2003/03/31'
print DateDiff(millisecond, GetDate(), @a)

こんな感じで。
Between の方が速いらしい。
上司に理由を聞かれるけど分からんのじゃ〜
005644NGNG
×SQL Server
○SQL Server2000

おいどんもう駄目ば〜い。
0057デフォルトの名無しさんNGNG
おいおい、時間で早さを競うなよ。

SQLサバなら、クエリアナライザで実行プランを表示シル!

オラクルなら、EXPLAIN PLANとかトレース&TOPROF。
SET TIMING ONだと、画面に表示をしている時間も含まれちゃうよ。
しかも、(INDEXが使用されているという前提だとして)あとから実行した方が
バッファ上のデータを引っ張ってくるからそっちの方が時間的に
早くなる可能性が大。
0058デフォルトの名無しさんNGNG
>>57
うむ、俺も後から実行したほうはキャッシングのおかげで速くなってる
だけだと思う。少なくとも2回は実行しないとわからんね。
005957NGNG
誤 TOPROF
正 TKPROF

でもう一つ気になったことをついでに。
今時のオプティマイザなら、それくらい等価に処理してくれるような気がするが・・・
0060ペーパープラチナNGNG
>>59
パッチあてないと入ってないのね。TKPROF。
自宅で試して、「え?間違った?」とか一人焦った。
0061デフォルトの名無しさんNGNG
初心者の私をお助けください。
こんな表があって
TABLE A
CD1 CD2 DATE1 DATE2
1 a 20020101 20020202
1 a 20020101 20020831
2 a 20020101 20020531
3 a 20020101 20020930
3 b null null

CD1とCD2をグループ化して今日の日付にマッチする
データをカウントして出したいんですけど悩んでおります。
1 a 1
2 a 0
3 a 1
3 b 0
以下、考えたのはダメでした
1.
select cd1,cd2,count(*)
from A
where current date between date1 and date2
group by cd1,cd2
2.
select cd1,cd2,
(select count (*) from wr3_tenji_t where current date1 and date2 )
from A group by cd1,cd2
0062厨房2号 ◆OjTjK0LY NGNG
>>44
色んな事以前にINDEXはどうなってるん?
0063デフォルトの名無しさんNGNG
DATE1とDATE2がなんなのかよくわからないけど、current_date(間が
スペースなのは間違いですよね?)がDATE1とDATE2の間にあるという
条件なら、

select cd1,cd2,count(*)
from A
where date1 <= current_date and date2 >= current_date
group by cd1,cd2

でいいのでは?
006461NGNG
>>63
ありがとうございます。
しかし、それでは1.のSQLと同じなので
検索結果は0件になってしまいます。

DB2を使ってるのですが、"current date"で
現在の日時を持ってきますです。
006561NGNG
自己レスです。解決しました。
select b.cd1,b.cd2,
case when c.cnt is null then 0 else c.cnt end
from (select cd1,cd2 from a group by cd1,cd2) as b
left outer join
(select cd1,cd2,count(*) as cnt
from a where current date between date1 and date2) as b
on a.cd1=b.cd1 and a.cd2=b.cd2
で逝きました。
皆さまありがとうございました。
006644NGNG
>>57
実行プランを表示してみた。
でも見方がわかんないっす!
「見積もりコスト」を見ればいいんすか?
006744NGNG
実行プランで「引数」をよく見てみると・・・

□ Between ○ And ● が
□ >= ○ And □ <=● に置き換わってる!

むぅ。
Between と >= <= は同等ってことか?
0068デフォルトの名無しさんNGNG
だったら解釈に時間がかからない分
下のほうが早いのかもね
0069デフォルトの名無しさんNGNG
>>67
もともと論理的に同等なのはわかってますよね? 問題は物理的にどうか、という
ことだったので予想通りですよね。in句がorに展開されるのと同様、Syntax
Sugarみたいなものなんでしょうね。

>>68
解釈にかかる時間はほとんど考えなくていいでしょう。
007057NGNG
>>66
今回の場合は、クエリテキスト部分で十分だろう。
自分が>>67で書いているように、内部ではbetweenと>= <=が等価に
実行されていることがわかるので、早さはほとんど変わらないということになる。
完全にイコールとは俺の知識では言い切れないが。。。。。

で、ちょっと補足。
クエリアナライザの実行プランは実行したSQL文が
サーバー内部でどのように処理されているかがわかる。
INDEXが使用されているのか、テーブルのフルスキャンなのか、
どのインデックスが使用されているのかなど・・・
また、それぞれの作業がSQL文の結果を返すまでの
全作業量に対してどの程度の割合を占めているのかがわかる。
なので、パフォーマンスを上げたいSQL文があった場合に
どの部分にコストがかかっているかがわかるのでそれを
どうにか解消してあげればSQL文のパフォーマンスがあがることになる。

そのほかにもset statistics io onコマンドが有効だと思う。
これは、実行されたSQL文においてメモリからと
ディスクからの読み込み量(ブロック数)がわかる。
なので、色々な条件でSQL文を書いてみた場合、
それぞれ違ったindexを使用していて、どれが最適か判断に迷う場合は
これで読み込みブロック数が少ない物がパフォーマンスが良いと判断できる。

ここら辺のことは、ブックスオンライン(BOL)の
データベースのパフォーマンスの最適化 − クエリのチューニング(←SQL2000の場合)
あたりを読むともっと詳しいことがわかるだろう。

#長文スマソ
0071SQLNGNG
ORACLEのSQLで、文字列が数値なのか判定する方法がありますか?
IS NUMBERみたいなのです。
0072デフォルトの名無しさんNGNG
>>71
文字列操作でやりくりしかなさげだ。
translate(str, ' 0123456789', ' ') is null
とかなんとか。符号とか、小数点とか面倒だなぁ。
0073デフォルトの名無しさんNGNG
いろいろ調べてみたのですが、なかなか答えにたどり着かなくてここで質問させてください。
SQL文はどれぐらい長い文字まで使えるのでしょうか?
環境
MSSQLServer2000
0074デフォルトの名無しさんNGNG
ネタはいらん
0075デフォルトの名無しさんNGNG
>>74
おまえがいらない( ´_ゝ`)プ
0076デフォルトの名無しさんNGNG
ミドルウェアによっても違いまふ
0077SQLNGNG
>>72
ありがとう。
うまくできました。(>>71)
0078SQLNGNG
>>72
SELECT code FROM TEST WHERE translate(ltrim(rtrim(code)), ' 0123456789', ' ') is null;
こんな感じです。
0079デフォルトの名無しさんNGNG
ある属性(TYPとしましょう)の値によってソート条件を切り替えることは可能ですか?
TYP=1の時はカラムA、カラムB、カラムC
TYP=2の時はカラムA、カラムB、カラムD
とか。

やり方ご教授ください
0080デフォルトの名無しさんNGNG
>>79
order by a, b, decode(typ, 1, c, 2, d, null)
0081デフォルトの名無しさんNGNG
>80
ありがとうございます、助かりました。
0082デフォルトの名無しさんNGNG
SQL Server2000 on Windows2000でのSQLの質問です。

例えば

・名前(varchar,50)
・日付A(varchar,5)
・日数A(int)

こんな感じのテーブルがあるとします。データは
太郎,08/29,3
次郎,08/25,2
三郎,08/26,0
花子,08/28,3
四郎,08/27,1

こんな感じです。
日数Aってのは、日付Aの何日前にひっかかるようにする?ってな感じの項目です。
例えば今日、抽出処理を行うとすると、太郎と三郎と四郎がHITしたいんです。

で、本日引っかかる人は誰?VIEWみたいなのを作りたいんですけど
どういう風にSQLを書けば良いか必死で考えてるんですけど、わかんなくて...

もしわかられる方おられましたら教えてください。

P.S.

日付Aをyyyy/mm/ddの日付型に出来ないの?とか日数Aは日数じゃなくて日付にすれば?
とかは仕様上出来ないんです..
0083デフォルトの名無しさんNGNG
日付Aのn日前を求めてそれを今日の日付とマッチングすればお終い。
n=日数A

日付関数をリファレンスで調べれば後は自力で逝けると思う。
0084デフォルトの名無しさんNGNG
SQLサバがわからんので考え方だけ

1.日付をオラクルでいうところのTO_DATE見たいな、文字列→日付型関数を使って変換する
2.日付型に変換した物から、日数分だけ引いた日付が今日(or基準日)と同じデータを求める

select * from table
where (TO_DATE(日付A) - 日数A) = 今日(or基準日)

#パフォーマンスは無視
#文字列の日付Aを日付型に変換するのは、月またぎなどを考慮するため
#上記SQL文はORACLEでも実行できません(w
0085SQLNGNG
申し訳ありません。ご教授お願いします。


あるselectの結果をそのまま参照元(From)として
使うことはできるのでしょうか?

イメージ的には
select f1,sum(f2)
from (select f1,sum(f2) from tableX group by xx)
group by f1

のような感じなのですが・・・

そもそも、可能なのかどうかもわかっておりません。
申し訳ありませんが、よろしくお願いします。
008612M初心者NGNG
>>85
できますよ。
サブクエリとか副問い合わせとか言われるやつですね。
ちなみに、上記のSQLだと
select A.f1,A.c1 from (select f1,sum(f2) as c1 from tableX group by xx) as A
group by A.f1...
とカラムやテーブルの別名を使用する必要があるかもしれませんね。
外側のgroup by こんなんで大丈夫だっけ?
0087SQLNGNG
できました!!
from (****) as A とすることを知りませんでした。


素早いご回答、感謝いたします!m(__)m
0088デフォルトの名無しさんNGNG
>>84
逆の考え方ならできた。
今日の日付に日数Aを足す(日付A = 今日(or基準日)+ 日数A)で。
mm/ddを日付型にconvertできんかったんで、苦肉の策。

select * from table where convert(varchar(5),DATEADD(day,日数A,getdate()),1) = 日付A

SQLserver6.5で確認、多分SQLserver2000でもいくと思う。
0089デフォルトの名無しさんNGNG
>88
逆の考え方は良い方法だと思うけど、保守するときは常に逆に考えないといけないから面倒かも。
そうそう。DATEADDにマイナスを指定できない?
0090デフォルトの名無しさんNGNG
>>89
AccessですらDateAddにマイナス指定できるんだから、出来ないわけ無いと思うけど…。
テストできる環境あるんなら試してみたら?
009184NGNG
>>88
万が一dateaddにマイナスの引数使えなかったら
datediffというのがあるみたいよ。
日付A - 今日(or基準日) = 日数A
な条件でいけそうな感じ。

というか、

> mm/ddを日付型にconvertできんかったんで、苦肉の策。

という文からすると、やっぱり月またぎとかでやばいことになるんじゃないの?
しらべてないけど、日付型に変換できなかったということは
文字列かなんかとして扱ってるんでしょ?
009289NGNG
>90
スマソ。環境ないのでテストできません。
今はOracle業務。

dateaddにマイナスが指定できるのでは? と思ったのは、
SQLの日付関数って大概はマイナス指定できるからです。
009382NGNG
みなさんありがとうです。
言われるとおり、[日付A]は文字列で持ってるので
Date型にコンバートやDateAddが使えないため
88さんの方法の今日の日付の方に[日数A]を足して
それと[日付A]を同じ形にして(mm/dd)比較する感じで
上手く行きました。
009488NGNG
>>89-91辺りに補足。
82さんは解決されたみたいだけど、一応。

ちなみにDATEADDは、マイナス行けます、今試しました。
日付Aが日付型なら、DATEADDでもDATEDIFFでも自由自在だったんですが。

っつか、to_dateみたいに、わりと何でも日付型に変換してくれる便利な関数は、
実は他のDBには無いっすな、ORACLEとSQLSererとUDBしか見てないけど。
0095デフォルトの名無しさんNGNG
>94
OracleはTO_DATEありまっせ。
0096デフォルトの名無しさんNGNG
むしろSQL Serverにはconvertはあってもto_dateはないから
Oracleの話かと思ってたけど違うの?
0097SQL初心者NGNG
#他のスレでも投稿しました。迷惑かけてすみません。

どなたか教えて下さい。

Pro*CでWhereの検索条件で直接、文字列と比較するのではなくて
プログラム内の変数と比較したい場合はどうするのでしょうか?

*date = "20020901";
の場合、where  DATE = date でOKなんでしょうか?
(DATEはデータベースの項目でCHARで定義)

あと、データベースで時刻(time)がCHARで宣言されていても time > 113030
というように比較できるのでしょうか?
* time -> HHMMSS 113030->11時30分30秒

SQL初めてでここら辺に疑問を感じました。
0098デフォルトの名無しさんNGNG
>>97
両方ともDATE型に変換して比較
where to_date(DATE,'YYYYMMDD')) = to_date( :date, 'YYYYMMDD' )

文字列のまま比較してもOKだけど、日付に関係ない値が入ってないことが
前提条件。

始めてだったらOTN(Oracle Tecnology Network)行って
マニュアル取ってくるのが吉。
0099SQL初心者 NGNG
> 98 さん
早速のレス感謝です。

dateの前に:がついていますが、これが変数を指すのでしょうか?
0100デフォルトの名無しさんNGNG
>>99
そうだよ。
Cの変数をSQLの中で使うときには:(コロン)をつける。
0101デフォルトの名無しさんNGNG
>99
「バインド変数」でマニュアル漁るが吉。
0102デフォルトの名無しさんNGNG
全然関係ないが
Oracleではバインド変数って言うんだな
知らんかった
0103SQL初心者NGNG
>100,101 さん

どうもありがとうございました。
0104デフォルトの名無しさんNGNG
>>101
Pro*Cじゃホスト変数って言うと思ったが…。
0105101NGNG
>104
OCIをダイレクトに叩く場合に使うのがバインド変数で、
埋め込みSQLとかSQL文で使うのをホスト変数と呼ぶらしい。

でも埋め込みSQLはバインド関数経由で呼ばれて、
最終的にはバインド変数と結びつくみたいだし呼びかたはどっちでもいいみたい。
Oracle監修の本でも「ホスト変数(バインド変数)」となっていることも多いしね。

俺がいい加減なのか、Oracleがいい加減なのか・・・。
0106デフォルトの名無しさんNGNG
>>105
マニュアルに関しては、oraがいい加減なんじゃないのか?
前にOTNかどこかで読んだが、○○の機能に付いて調べてみると
この機能の詳細は、××マニュアルを読んでください。
と書いてあるのに、××マニュアルには
□□マニュアルを読んでください。という風にたらい回しにされて
結局欲しい情報にたどり着けなかったとかいう笑い話もあったぞ。
0107104NGNG
>>105
そういうことね。マニュアルでバインド変数を探したら確かにそういう書き方してる
部分を見つけたよ。どちらでも間違いじゃないっていわれればその通りなんだろうね。
昔の呼び方をそのまま引きずってる感じなんだろうな。
0108デフォルトの名無しさんNGNG
たまに「SQL99」みたいな表記をみかけるのですが、これは標準規格
なのでしょうか(ANSI Cみたいな)。そうだとして、こういう規格は
どこか(Webなど)で読めるのでしょうか。書籍onlyでしょうか。

UNIX板で聞いたんですが鼬買いらしく返事をもらえませんでした。
ご存じの方がいらっしゃいましたら、教えてください。
よろしくお願いします。
0109デフォルトの名無しさんNGNG

すいません、SQL教えてください(TT)
下記のようなSQLを発行したらエラーになってしまいます。

SQLServer2000で、

insert into
tableA(
A,
B,
C
)values(
'Y',
'X',
(select max(hoge) from hogehoge group by hogekey)
)


Valuesの中にSelectって書けないんでしょうか??(´ヘ`;)

0110デフォルトの名無しさんNGNG
( ゚д゚) ポカーン  

values句じゃなくて、select文でインサートしろ

insert into
tableA(
A,
B,
C
)
select 'Y','X',max(hoge) from hogehoge group by hogekey
0111109でございます。NGNG
>>110

Σ(゚Д゚)あふっ!

し、しってたさ、、







ウソです。ありがとう!(>_<)
0112デフォルトの名無しさんNGNG
>>110
そういや、
そのSQL発行した後にmax(hoge) が知りたいときってどうすりゃいいんだ?
どんな値をINSERTしたっ!ってのはわからない?
トリガーとかじゃなくて、、、
0113デフォルトの名無しさんNGNG
>112
なんか意味あるの?
insert前に普通にmax(hoge)を求めるselect文を発行すれば何の問題もないと思うけど。

もしinsert後にmax(hoge)が知りたいんだったらcommitかける前に
select文発行すればそのトランザクション内でのmax(hoge)が取れるね。
0114デフォルトの名無しさんNGNG
>>112
insert後に select C from tableA where A='Y' and B='X' すれば?
それか>>113の言うようにトランザクションを宣言して2回 selectすれば?
0115デフォルトの名無しさんNGNG
Linux のDB2を使用しています。
以下のような出力結果を得たいのですがSQL文がわかりません。


select * from 見積

見積NO 氏名
1000 鈴木
2000 田中
3000 山田



select * from 見積詳細

見積NO 詳細No 商品コード 金額
1000 01 A 100
1000 02 A 100
1000 03 B 300
1000 04 C 500
2000 01 B 300
2000 02 C 500
3000 01 A 100

↓SQL実行

出力

見積NO 氏名 合計金額
1000 鈴木 1000
2000 田中 800
3000 山田 100
0116115続きNGNG

自分で考えてみた文は↓です。
(SQL Assist使用)

SELECT
DB2."見積"."見積NO" AS "見積NO",
DB2."見積"."氏名" AS "氏名",
SUM(DB2."見積詳細"."金額") AS "合計金額"
FROM
DB2."見積詳細",
DB2."見積"
where
 DB2."見積詳細"."見積NO" = DB2."見積"."見積NO"
GROUP BY
DB2."見積詳細"."金額",
DB2."見積"."見積NO",
DB2."見積"."氏名"


しかし、これだと↓になってしまい、商品コードごとの合計になっているようです。
見積Noごとの合計はどのようなSQL文にすればよいのでしょうか。。

見積NO 氏名 合計金額
1000 鈴木 200
1000 鈴木 300
1000 鈴木 500
2000 田中 300
2000 田中 500
3000 山田 100
0117DB2ユーザじゃないけどNGNG
>>115-116
group by句に「DB2."見積詳細"."金額", 」を含めたらマズイでねえの?
0118デフォルトの名無しさんNGNG
SELECT
DB2."見積"."見積NO" AS "見積NO",
MAX(DB2."見積"."氏名") AS "氏名",
SUM(DB2."見積詳細"."金額") AS "合計金額"
FROM
DB2."見積詳細",
DB2."見積"
where
 DB2."見積詳細"."見積NO" = DB2."見積"."見積NO"
GROUP BY
DB2."見積"."見積NO"


だべ
0119115-116NGNG
>>117
ずばりでした!
意図した結果が取得できました。ありがとうございます。

>>118
0120115-116NGNG
>>118
DB2."見積"."氏名"
も必要でした。。
0121デフォルトの名無しさんNGNG
これじゃダメかな?

SELECT
  h.見積NO,
  h.氏名,
  m.合計金額
FROM DB2."見積" h,
   (
    SELECT
      m.見積NO,
      SUM(m.金額) AS 合計金額
    FROM DB2."見積詳細" m
    GROUP BY m.見積NO
   ) m
WHERE h.見積NO = m.見積NO

詳細の粒度に合わせてから group by すると遅い気がするし
氏名をグループ化するなんてオレにとっては言語道断です
0122115-116NGNG
>>121
わざわざSQLを示していただきありがとうございます。
僕も氏名のグループ化はマズイと思います。。
たまたま↑の例では氏名にしてましたが
そこの部分は本当は顧客コードです。
なので、実際には特に問題ありませんでした。
ってそういう次元の問題じゃなかったらスイマセン。。。
0123115-116NGNG
追記。
しかも氏名のグループ化をはずすとエラーで出力が得られませんでした。
0124121NGNG
>123
その文脈では group by に氏名は必要だよ

氏名のグループ化って、そういう意味じゃなくてね
大方は 氏名 VARCHAR(50) とかになってるじゃない
当然 INDEXなんて付いてないと思うけど

そういう列を group by 句に書くとソートするのに
時間がかかるの。もしくはリソースを消費するの
group by 句にふさわしい列の属性は、INDEX が付いてて
整数とか短い文字列。区分とかコードになるのが普通でね
0125SQLNGNG
SELECT * FROM (
SELECT user.no,(user.no + '@' + isnull(domain.name,'nothing') as mailaddr
FROM user,domain
WHERE user.kbn *= domain.kbn and
) AS WK_TABLE
WHERE mailaddr like '1%' ORDER BY user.no
例:
userテーブル   optionテーブル
no,optionKbn kbn , name
1 , 001   001, aaa
2 , 002   002, bbb
3 , 002   003, ccc
4 , 000

この場合、まず、第一段階の副問い合わせの結果が
1,1@aaa
2,2@bbb
3,3@bbb
4,4@nothing
となりまして、そこから mailaddrの頭に1が付くものだけを取ってくる。
つまり
1,1@aaa
だけとなる。
ですが、
実際の結果は
1,1@aaa
2,2@nothing
3,3@nothing
4,4@nothing
となってしまいます。
なんか、副問い合わせが内部で2回走っているような感じです。
なにかお気付きの点等ありましたら、よろしくお願いします。
0126デフォルトの名無しさんNGNG
>125
それSQL SERVER7 SP3でしょ?原因は外部結合だと思う
外部結合した*=の右側の列をwhere句に使うとおかしくなるよ

たぶん where mailaddr like '%nothing' とすると全部

1,1@nothing
2,2@nothing
3,3@nothing
4,4@nothing

にならない?オレもよくわからん。違う方法を見つけた方がいいみたいだ
0127SQLNGNG
>126
環境としては
SQL Server7のSP6でした。
原因はやはり外部結合っぽいですね。
でも、これは仕様というよりバグっぽく思えるのですが・・



最終的にはunionを使用して解決させました。
ありがとうございました。
0128デフォルトの名無しさんNGNG
あのぉ〜、
VBから、ADOX使ってのSQLなんですが、

Query = "select aaa,bbb,ccc,ddd from master group by aaa"

ってしたいんですが、
「集計関数の一部として指定された式'bbb'を含んでいないクエリを実行しようとしました。」
ってエラーがでてしまいます。

Query = "select aaa,bbb,ccc,ddd from master group by aaa,bbb,ccc,ddd"

こうすると、エラーは出ないんですが、処理速度を上げる為に、
bbb,ccc,dddはgroup化したくないんです。
かと、いって

Query = "select aaa from master group by aaa"

これじゃ困るんです。
ほんとアホすいません、教えてください。
0129デフォルトの名無しさんNGNG
( ゚д゚) ポカーン…

Query = "select aaa,Max(bbb) bbb,Max(ccc) ccc,Max(ddd) ddd from master group by aaa"
0130128NGNG
>>129

>Query = "select aaa,Max(bbb) bbb,Max(ccc) ccc,Max(ddd) ddd from master group by aaa"

「集計関数の一部として指定された式'Max(bbb) bbb'を含んでいないクエリを実行しようとしました。」
ってなってしまいますけど。
0131デフォルトの名無しさんNGNG
あっそ。
0132デフォルトの名無しさんNGNG
>128
なあ、グループ化っていう事の意味をちゃんと考えてみてくれよ。
そうすれば、やりたい事に矛盾がある事や、エラーメッセージの意味がわかると思うよ。
0133デフォルトの名無しさんNGNG
>128
つーことは、カラムbbbはグルーピングしないとならないってだけじゃないの?
本当にグループ化する際に省略可能なカラムなの?
データの中身も書いてないし、少ない情報でSQL書いてくれた>129に失礼だよ。
0134128NGNG
説明不足で申し訳ないです。
まだ、SQLを始めたばかりで、よく分ってないんですが、

Query = "select aaa,bbb,ccc,ddd from master"

出力の結果は、このように出力が欲しいんですが、
並び順だけは、aaaの項目でグループ化したいって事なんです。
bbb,ccc,dddの並び順は問わない、って事なんです。

Query = "select aaa,bbb,ccc,ddd from master group by aaa"
それで、「group by aaa」だけを記述したんですが、

Query = "select aaa,bbb,ccc,ddd from master group by aaa,bbb,ccc,ddd"
しか方法は無いんでしょうか。

ほんと、アホですいません。
0135デフォルトの名無しさんNGNG
何をしたいのか分からない・・・
本当にグループ化をしたいの?
もしかして並び替えをしたいだけじゃないの?
group by じゃなくて、order byじゃないの?
0136デフォルトの名無しさんNGNG
並び順って...OrderByじゃなくて?

ってか、SQL入門からやり直したほうが良いぞマジで。
せめてAccessのクエリデザイナを使うとかさ。
0137128NGNG
重ね重ね、申し訳ないです。
記述間違えてました。

Query = "select aaa,bbb,ccc,ddd from master group by aaa,bbb"
group byの記述を「group by aaa,bbb」として考えてみてください。

結果的には、
aaa|bbb|ccc|ddd
−−−+−−−+−−−+−−−
  1|  1|  3| 18
  1|  2|  9|  1
  1|  3|  3| 61
  2|  1| 13|  6
  2|  2|  5|  9
  2|  3|  1| 12
  3|  1|110|  1
  3|  2| 80|  0
  3|  3| 13| 13
こんな感じの結果が欲しいんです。
0138デフォルトの名無しさんNGNG
まぁとりあえず

Query = "select aaa,bbb,ccc,ddd from master order by aaa,bbb"

で希望の結果が出るかどうか試してくれ
0139デフォルトの名無しさんNGNG
>128
group by句を用いたselect文で出力できるのは
 group by句で指定した列名とSQL集合関数
それ以外の列名を出力項目として列挙するとエラーになる

きちんとSQLの文法を理解したうえで適切な使い方をしないと
後々、自分が困ることになるよ
0140デフォルトの名無しさんNGNG
>137
カラムaaaをグループ化するとカラムaaaで1の値を持つ行は1行しか出せない。
SQLの本は何を読んでる?

>128の希望する結果表だけ見ると、
ここにいるみんなは「order byちゃうんかと小一時間問い詰めたい。」と思っているはず。
0141デフォルトの名無しさんNGNG
只今128は凹んでおります。
もとに戻るまでもうしばらくお待ち下さい。
0142128NGNG
皆さんレスありがとうございます。
検証遅れてすいません。
結果は、皆さんご指摘の通り、うまく行きました。
まったくもって、アホすいません。
勉強になりますた、ありがとうございます。
そこで、sqlしっかりと身に付けたいんですが、
オススメの書籍あったら、教えてくれませんでしょうか。
0143無料動画像NGNG
ヌクなら、やっぱりかわいい子のほうがイイ!!
あなたを満足させる無料動画集!!
http://www.traffimagic.com/WIPE7MMLZCA/comein/PRTPJ
0144デフォルトの名無しさんNGNG
SQLが遅くて困っています。たくさんの表を結合するとき、
結合条件はどんな順番で指定すれば効率がいいのでしょうか。
フィルタ条件とあわせた場合、どちらを上に書きますか。
EXPLAIN PLANで見てみると単に条件の順番を変えただけでは
コストが変わらないみたいなのですが。DBは、Oracle8.1.7です。
よろしくお願いします。
0145デフォルトの名無しさんNGNG
3!
0146デフォルトの名無しさんNGNG
>144
表の大きさにも拠るのでなんとも。
順番は先にフィルタを通す必要があるかどうかでも変わるし・・・。
基本的に結果表を結合するまでに小さくなるようにしたほうがいいと思われ。
0147デフォルトの名無しさんNGNG
>>144
128ですか?
0148デフォルトの名無しさんNGNG
>146
ありがとうございます。
極端に大きさが違う表を結合するときと、同じくらいの
大きさの表を結合する場合は極端に数が減る結合を上に
書くほうがいいんですね。
その場合、大きい表の方を左辺と右辺のどちらにもって
きても同じですか。
フィルタ条件は結合とあまり関係ない日付なんかの場合
ですが、これもすごく数が絞られる結合なら先に書く
ってことでいいのでしょうか。
0149デフォルトの名無しさんNGNG
>>148
それ以前に、インデックスとかは大丈夫か ?
0150デフォルトの名無しさんNGNG
机上の空論だけで話を進めないで
ちゃんと実行計画も見ような
0151デフォルトの名無しさんNGNG
>142
http://www.seshop.com/detail.asp?pid=1596
0152144=148NGNG
インデックスが大丈夫かどうかというのはまだ
調べてません。一応全部の外部キーに設定されてますが、
NOTとかMAXとかをどうしても使うのでフルスキャン
になってしまう部分もあります。
どこから手をつけるのが一番いいのでしょうか。
初歩的な質問ですみません。よろしくお願いします。
0153デフォルトの名無しさんNGNG
>>152
つうか、実行プランは調べたんでしょ。だったら、どこがネックになってるか
わかってるんじゃないの。そのネックをどうやって解消するべきか考えたら。

Oracleはあまり詳しくないんだけど、Oracle8ってルールベースとコストベース
両方できたっけ? コストベースになってるならAnalyzeはしてるよね?
それからOracleはデフォルトでfrom句に書くテーブルの順番って関係あるん
だっけ? 関係あるのなら絞り込みしたい順番にテーブルを書く必要があるで
しょう。

まずは理解できなくてもチューニングマニュアルを読むことから始めましょう。
0154デフォルトの名無しさんNGNG
>152
あと、パーティションテーブルだったらパーティションキーをちゃんと結合条件に入れないと全然だめぽ。

>153
コストベースでテーブルの評価順序を規定する場合はヒント文でなんとかできます。

select /*+ orderded */ 〜って感じで。
でもあくまでオプティマイザへのヒントなんで、オプティマイザが考えたコストが低い場合は却下されまふ。
と、これは>153ではなく>152へ言うべきだったな。スマソ。
0155デフォルトの名無しさんNGNG
ここさ、変な煽りとか、AAコピペする奴とか居なくていいね。
0156108NGNG
>>155
居ないんじゃなくて、無視されてるだけなんじゃないかな……
こっちは煽ってなくても無視されてるけど。
0157144=148=152NGNG
ちょっと別件が忙しくて件のクエリーを直す暇がなくなって
きてしまいました。
今度パフォーマンスチューニングのマニュアルを読んで出直
してきます。もっとちゃんとした質問ができるようになったら
またよろしくお願いします。ありがとうございました。
0158デフォルトの名無しさんNGNG
>156
あのね、この場合は完全に本屋へ足を運んだり(あるいは本屋の検索を使う)
ググールで検索したほうが早いから敢えて誰も突っ込まないだけだよ。

今はSQL92が主流だからそれ関係で調べてみるといいかもね。
0159デフォルトの名無しさんNGNG
>158 せっかく放置してたのにぃ
0160108NGNG
ありがとうございます。

>>158
もちろん、反応を待つよりGoogleや2ch検索を使うほうが早いのでそちらを
試したあとで書いています。書いたあとも何度か別のキーワードを試しました。

Googleで検索した結果、大部分は「SQL9x準拠」という文字がひっかかっている
ようです。それらのほとんどはMySQLやPostgreSQLやDB2やOracleや……の
ドキュメントのコピーが検索されているものです。あとはWebチュートリアル
もありました(が、入手法は書いていない)。
要点はこの二つです:

- 購入するしかないのかどうか (「ない」ことを調べるのは難しい)
- 電子化されている資料があるのかどうか

>>159
宿題終わってないんですね?
0161デフォルトの名無しさんNGNG
primary keyとなっている列名を取得するSQL文を教えてください。
環境はWindows2000、SQL Plus9.0です。
0162デフォルトの名無しさんNGNG
>161
Oracle だったらuser_cons_columns,user_constraints
から引き出せば。プライマリだったら
user_constraints.CONSTRAINT_TYPE='P'で。

0163161NGNG
>>162
どうもです。
0164デフォルトの名無しさんNGNG
シツモンヌ
オラクル8.1.7からサイベースDBを参照することは出来ますか?
0165デフォルトの名無しさんNGNG
>>164 サイベースDBってなんだよ、旧SQL Serverのことか?
0166デフォルトの名無しさんNGNG
>>165
SyBaseじゃなくてか?
0167デフォルトの名無しさんNGNG
>>164
7,8年くらい前は結構メーカの異なるDBへの接続製品が話題になってたけど、
最近は全然聞かないなあ。あんまり需要がなかったのかな。

Googleで「Oracle Sybase 異機種 接続」で検索したらいくつか出てきたぞ。

>>165
おそらくSybase ASEのことでしょ。
0168デフォルトの名無しさんNGNG
そんなことやるなんてわざわざ災いの種バラまいてるようなもんだ
0169デフォルトの名無しさんNGNG
サイベースDBじゃ通じないのか。
うん。sybaseASEのことでございます。
ともあれ>>167氏thx

>>168
オラクル側にASE上のテーブルのビューを作りたいのさ。
0170デフォルトの名無しさんNGNG
>>160
http://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&q=SQL99+%8BK%8Ai%8F%91+%93%FC%8E%E8&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0171167NGNG
>>169
Sybaseと聞いてASEだと思ったらASAだったりすることがあるからじゃ
ないかな。
0172デフォルトの名無しさんNGNG
>>160
どっかでまったく同じ質問見たような気がする
0173108NGNG
>>170 すばらしい。
そうか、「規格書」なんですね…… なんで気づかなかったのだろう。
さっそく読んでみます。ありがとうございます。
>>172 UNIX板のMySQL/PostgreSQLスレじゃないかと思います。
0174デフォルトの名無しさんNGNG
>>173
なんというか、まっ先にANSIのWEBサイト見に行こうと思わなかったのかなぁ?
電子文書化されているのか、はたまた有料なのか、それらの疑問は一発で
解決しただろうに・・・

最近はSQL92 & Core SQL99のリファレンス・ハンドブック(日本語で解説)が
\3,000程度で出版されているよん(題名忘れたけど・・・)
0175デフォルトの名無しさんNGNG
>>173
まぁ、そのなんだ、、、「マルチですよ」って宣言した時点で放置は決定していると思うが?
0176108NGNG
>>174 www.ansi.orgにいって検索してみましたが一件もみつかりませんでした。
>>175 「マルチ」とは?
0177デフォルトの名無しさんNGNG
> 「マルチ」とは?
ネタか釣り決定放置
↓ネタではないですよ
0178デフォルトの名無しさんNGNG
>>176
> www.ansi.orgにいって検索してみましたが一件もみつかりませんでした。
ネタだよな?
マジだと"私は上っ面しか見てません"と公言しているようなもんだよ
0179デフォルトの名無しさんNGNG
WIN98からSQL2000につながらないのはなんで?
0180デフォルトの名無しさんNGNG
>>179
なんでだろう? 気合が足りないとか♪
0181デフォルトの名無しさんNGNG
>180 きっと電圧が足りないんだyo!

>179 だから詳しく状況を(略
0182デフォルトの名無しさんNGNG
>>179
1)コンセントは刺さっていますか?
2)コンピュータの電源は入っていますか?
(正面のランプが緑色に点灯していますか?)
3)ディスプレイ(テレビのような画面のことです)は電源が入っていますか?
0183デフォルトの名無しさんNGNG
>180
違うよ。足りないのは、きっと愛だよ。
0184デフォルトの名無しさんNGNG
>>180->>183
かなり釣れたなw
0185デフォルトの名無しさんNGNG
ネタレスでもつれたというのだろうか。
0186デフォルトの名無しさんNGNG
>>185
釣られたのは君だYO!
0187デフォルトの名無しさんNGNG
>>176のショボイとしか言いようのないゴミを捨てといて釣りとはおめでたい
レス4個程度で>>184のように"かなり"という表現を使うあたり相当おめでたい
ハッピーハウスにでも逝ったら? ショボイ奴はとことんショボイな(藁

・・・って、ここはネタスレだったっけ?
0188デフォルトの名無しさんNGNG
前スレは良スレだったのに
0189デフォルトの名無しさんNGNG
>188
最近まではここもマターリしてたよ。
0190108NGNG
>>178 使いかたがまずいのでしょうか。
searchのリンクから検索ページにいって「SQL92」だと0件。
「SQL」だと求職っぽい内容のを含めて13件。そのうちに
目的の情報なし。

>>177
- まったく同じメッセージを複数のスレッド/板にまたがって貼っている宣伝業者と、
- 情報収集の進捗を書きつつ、より適切と思った板に移動して質問した人
を同じふうに「マルチ」と書いていた(ようだった)ので、どういう意味に
使っているのか確認しようとしたわけです。

>>187 ネタとか煽り(と他の人がいっている)メッセージがあるから
といって、自分が何でも書いていいという理由にはならないこと
ぐらい理解できないのかな?
0191デフォルトの名無しさんNGNG
>190
結局何? Webで読めるところを探してて、見つからなそうなら書籍を買うってこと?
サーチに手間取ったりするなら買ったほうが明らかに安いし、
Web探してる時間を勉強に充てられるんだから効率いいよ。

これ以上は荒れるだけだからもうやめてほすぃ。
0192デフォルトの名無しさんNGNG
>>190
public/search.aspで検索したってことなのかな?
そこの断り書きをちゃんと読んでるのかね
規格を探すためのポインタが示されてなかったか?
0193デフォルトの名無しさんNGNG
ANSIじゃなくてもJISCを探すという手もあるのに。
少なくとも「閲覧」は無料でできる。

というか、>>191さんに同意。
0194デフォルトの名無しさんNGNG
>>190
とあるスレに投げかけた質問/問題が放置されたからといって
己の主観でマルチポストしていいという理由にはならないこと
ぐらい理解できないのかな?

宣伝、情報収集等その目的を問わず、マルチポスト(=複数投稿)という
行為には変わりはないゆえに同類として扱われる
# 板/スレ住人に適切なスレへの誘導をされた場合を除く
0195デフォルトの名無しさんNGNG
ドキュメント読む前に、空気を読む人間に成長したほうが、
実りある人生をおくれるとおもうよ。
本気で。
0196デフォルトの名無しさんNGNG
>>179
接続に使うプロトコルはWIN98にもあるか?
例えばSQL2000のサーバがTCP/IPでWIN98がNetbiosだけとか間違ってね−か?
0197デフォルトの名無しさんNGNG
t1
uid name
1 a
2 b
3 c
t2
uid name
1 ab
3 cc
3 cc
というデータがありまして、t2.uidにデータが存在するt1.*(この場合は
uid1と3のみ)を取得したいと思うのですが、
select t1.* from t1,(select uid from t2 group by uid) as t2 where t1.uid=t2.uid;
と現在考えているのですが、もっとスマートな方法をどなたかご教授頂けないでしょうか?
0198デフォルトの名無しさんNGNG
>197
スマートって何よ? 他に方法ないじゃん。
変えてもexists使うとかinを使うとかしかできないよ。
これくらいのクエリでスマートさを求めるより、
インデックスの張り方とかを考えたほうがいいとオモワレ
0199197NGNG
>>198
いえ、全く速度面とかに問題があるのではなくて、何かやりたいことに
ぴったしはまった結合があったように思えて夜に寝てしまいました。
select t1.* from t1 include join t2;
くらい短く書く方法が・・・あったような気がするだけな気がしてきました。
無いという答えが自分の中に明確に無かったので、
言って貰えて助かりました。ありがとうございました。
0200198NGNG
200!

>199
なるほどね。コードに疑念を持つことは良いことだよ。
でも疑心暗鬼にならないようにほどほどでキリをつけるのも一考だね。
0201デフォルトの名無しさんNGNG
>>197
exists
0202デフォルトの名無しさんNGNG
困ってます!困ってます!助けてください!!

文字列の引用符として’を使っている構文で文字列の中に’があった場合、どうやって記述すればよいのでしょう??
よろしくおながいします。
0203デフォルトの名無しさんNGNG
>201
ガイシュツ
0204デフォルトの名無しさんNGNG
>202
死ね
0205デフォルトの名無しさん NGNG
>>203 204
怖い人たちだなぁ...

>>202
DBエンジンによって違うよ。
'⇒''って変更してみたり、'⇒\'って変更してみたりしてみそ
0206デフォルトの名無しさんNGNG
ORACLEのPL/SQLで、SQLからUNIXのシェルを実行させたいのですが、
どうやればできるのでしょうか?
やっぱり無理なのかな。
0207デフォルトの名無しさんNGNG
>>206
興味があったんで調べたが、非常に難しいらしい。
つーか純粋にシェルを呼び出す事はできないみたい。
ttp://members12.cool.ne.jp/~yoshi0915/oracle/000831/20437.html
0208デフォルトの名無しさんNGNG
なんでそんなアホな仕様しか思いつけないのか
0209デフォルトの名無しさんNGNG
そーいえば、SQL*Plusのコンソールから
シェルのコマンド叩ける方法があったような気がしたが
なんだっけか?
#なんか急に知りたくなった。。。。
0210デフォルトの名無しさんNGNG
>209
!
0211209NGNG
>>210
エクスクラメーションじゃ出来なかったぞな。
気になってマニュアルまで調べてしまったが
host ダタヨー
ちなみに、Win2kでOra817な環境ね。
SQL*PlusはGUIなヤシ
0212デフォルトの名無しさんNGNG
>>211

UNIXのsqlplusは!だね、今でも。
oracle9iでそうだった。
0213デフォルトの名無しさんNGNG
select price from pricetable where id = 12

って

pricetableからidが12のpriceを取得する

ということですよね?
0214デフォルトの名無しさんNGNG
>213
入門書嫁。
つか試した方が早い。
0215デフォルトの名無しさんNGNG
SELECT DISTINCT ON (location) location, time, report
  FROM weatherReports
  ORDER BY location, time DESC;

PostgreSQLのマニュアルにある例なんだけど、
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/sql-select.html
この例だとLocationの重複を取り除いた天気Reportが
Locationのアルファベット順に出てきますよね。
これをLocationの重複を取り除いて、timeが新しい順に
取得したい場合はどうすればいいのですか?
0216デフォルトの名無しさんNGNG
改行とかインデントが無くなったSQLの整形ってみなさんどうしてます?
Accessのクエリって勝手に改行消すからいちいち改行して解読するんですが。
フリーのソフトも探してみたのですがイマイチしっくり来なくて。。
ちなみに見つけたモノです↓
ttp://www.cypress.ne.jp/iceprobe/sqlice/
ttp://www2.freejpn.com/~az0652/softwares/splcnv.htm
0217582NGNG
>197

なんでそんな回りくどい、アホなqueryしてんだ?
group byなんてそんなんで使うか?普通。

>198
>199
無くねーよ。

select * from t1
where
uid in (select distinct uid from t2)

でええやん?
>197 の仕様なら。
0218デフォルトの名無しさんNGNG
>>215
ORDER BY句からlocation引いて、「ORDER BY time DESC;」
でだめなの??
0219デフォルトの名無しさんNGNG
BETWEEN で、たとえば1000から最大値を指定する場合どうすればよいですか?
0220219NGNG
解決しました。
0221デフォルトの名無しさんNGNG
sqlserverでのoracleの
select * from tab
と
desc
を教えてください。
0222デフォルトの名無しさんNGNG
まずあなたの国の言葉を教えてください。
話はそれからです。
0223そもそも…NGNG
>> 219
1000以上"って条件じゃだめなのかな?
'最大値'っていうのがクセモノだな・・・。
そいつはもしかして、値が指定されたらその値で、指定されなかったら
最大値でってことかな?。(ホスト言語からSQLを発行するような場合
渡河) であれば、状況によってSQL文を切り替えることも出来るはず。
BETWEENにこだわる理由は何かな?
0224そもそも…NGNG
>>223
解決してるジャン。あほでした。m(__)m
0225221NGNG
早く教えて!
0226デフォルトの名無しさんNGNG
>221
>225

初等教育受けなおしてきた方がいいんでない?(w
0227コンパイル成功!?NGNG
>221 のソースコードをコンパイルしてみました。

『Oracleにおいて、SQL文「select * from tab」を発行
すると得られる情報と同様の情報を、SQL Serverで
得るにはどういうSQL文、或いは、コマンドを発行す
ればいいのでしょうか。 教えてください。』

しかし、私の実行環境(脳ミソ)ではコアを吐いてし
まいました。

お粗末でした。

以上です。
0228デフォルトの名無しさんNGNG
同じ質問を SQL vs ora スレで見た気がする
0229デフォルトの名無しさんNGNG
てかFAQだよ。
ヒントはsp_・・・
0230デフォルトの名無しさんNGNG
抽出したレコード群1に対し、サブクエリを使って別のレコード群2を結合させ、1回のSQL発行で
必要な全てを抽出するのと、いったんレコード群1を抽出し、都度SQLでレコード群2を抽出する
ようプログラムを書くのとどちらがパフォーマンスがよいですか?
なほ、何件ヒットするかは不明です。数件かも知れないし数万かも
0231デフォルトの名無しさんNGNG
もっとお母さんみたいに言ってくれ
0232デフォルトの名無しさんNGNG
>>230
きちんと実行計画みたらわかるんじゃん?

で、どちらでもきちんと適切と思われるINDEXを使用しているならば
たぶん1発の方が多少なりともコストは低いと思われ。
SQLの書き方にもよるが、複数回SQL文を発行すると
オプティマイザでの解析処理が複数回走ってしまう可能性があるので。
あと、何らかの言語でループさせて複数回SQL文を発行するんだろうけど
その分のコストもある死ね。
0233デフォルトの名無しさんNGNG
>232
どうもです。
実行計画なるもにその情報があるわけですね。これはチト勉強が要りそうですね
「一発の方が多少なりともコストが低いと考えられる」ということですが大変参考になります。
ありがとうございます。

ちなみにアドバイス随時募集です(^^;
ちょ〜亀レスでも良いです。よろ。
0234デフォルトの名無しさんNGNG
>217
ちゃんとレス嫁。
>198にて、『変えてもexists使うとか「in」を使うとかしかできないよ。』
と書かれてる。
大体、distinctを使う時点で厨房なのに、口調だけ偉そうなのは止してくれ。
0235デフォルトの名無しさんNGNG
group byだって高いやん?>234
mysql並のsql文でやれることでもないやん。

で、君ならどんなquery書くの?
0236234NGNG
>235
漏れはt1がユニークインデックスと前提にして考えて、

select * from t1
where
uid in (select uid from t2 group by uid)

と書くと思う。
ハッキリ言って、t1とt2のテーブルの規模が解らないからあくまでひとつの回答でしかないけど。
それにデータ量によってはオプティマイザによって、>197と同じ式に展開されて
サブクエリ側の結果表を先に作ってネステッドループさせるようになると思うし。

で、distinctとgroup byは結果表の作り方が異なるじはずだが、
少なくとも1000万件くらいのデータで実測して言ってるよね?
コストが少々高くてもアクセスバイト数やインデックスの使われ方によってはベラボーに速いはずだけど。
0237デフォルトの名無しさんNGNG
取得結果のたとえば3行目〜7行目だけ限定するようなことはできるのでしょうか。
select * from hoge where rownum>2 and rownum<8
のような意味合いなのですが、rownumをこういうふうには使えなかったので…
0238デフォルトの名無しさんNGNG
>>235-236
このケース、そもそもdistinctもgroup byも必要ないけど。
サブクエリを先に評価するようオプティマイザを誘導する場合でも
俺はそうは書かないな。

> distinctとgroup byは結果表の作り方が異なる
まじ?

>>237
select *
from (select hoge.*, rownum num from hoge)
where num between 3 and 7
0239デフォルトの名無しさんNGNG
>236

>少なくとも1000万件くらいの
(*´Д`*)Pu...
こんな厨房質問する奴がそんな案件携わったるわけないやん。
、と思いたい。

だいたいそんな大きいデータ量でネステッドループですか・・・

groupとuniqueでgroupの方が早いか?
DBなに使ってんの?ボラ駐っぽいな・・・

つーか、データ量が多けりゃindex使えなんて、何当たり前のこと
嬉しそうに言ってんだ・・・

distinct(unique)を使う時点で厨房だそうですYO!皆さん。
扱うデータ、スキーマによるとか(また当たり前のこと
言い出さないでね。

>238
joinしてis not nullでもする気?
取り合えず、書いて見れ。
0240デフォルトの名無しさんNGNG
>>239
joinなら必要だけど、in(query)でしょ。exists(query)といっしょ。
0241デフォルトの名無しさんNGNG
そうそう。
#まぁ、query planが一緒かっつーと違うだろうけど。
で、!使わずに!考えてみたんだけど。

>238 == 240 ?
の言ってる効率のいいqueryみてみたいんで、
取り合えず、書いてミレ。
0242238,240NGNG
>>241
a) select * from t1 where uid in (select distinct uid from t2);
b) select * from t1 where uid in (select uid from t2 group by uid);
c) select * from t1 where uid in (select uid from t2);
d) select * from t1 where exists (select * from t2 where t2.uid = t1.uid);
この4つの結果が同じってのはおけ?

んで、効率かぁ。
existsを使った場合は必ずメインクエリから評価されるけど、
inだとオプティマイザが評価順序を選択できる。

俺習慣だと、
t2.uidにインデックスが切ってないとか、
t1のレコード数 >> t2のレコード数とか、
t2がリモートデーターベースにあるとかで、
サブクエリから評価して欲しい場合にしかinは使わないな。

その場合は、
select * from t1 where uid in (select uid+0 from t2);
って書いてる。残りは全部exists使ってる。

a)、b)みたいに書いたほうが効率がいいケースてのは…ある?
0243241NGNG
>242
Miguel de Icazaの記事読んでて眠くなったので明日レスするぽ。

http://www.os-omicron.org/~takano/private/trans/bongo-bong_j.html
0244241NGNG
>242
戻ってきたよ。
眠気眼なんですが、だいたい分かったポ。

>a) select * from t1 where uid in (select distinct uid from t2);
>b) select * from t1 where uid in (select uid from t2 group by uid);
>c) select * from t1 where uid in (select uid from t2);

上の2つはだいたいoptimizeされて一緒だろうけど、
#たぶん、データ量にもよるけど(;´ω`)
a>b>cの順になると思うぽ。cは無駄な比較がでる。
データ量が小さければuniqueさせるコストも低いし、大きい場合は
比較時に有利。a>bは実測からもわかる。

dは、nested loopされるっぽいけど、
t1*t2の行数回、比較が行われるので処理対象のデータ量多い場合
向かないと思うな。小さい場合はd > c > a ではないかな、と。

dとaの損益分岐点はどの辺にあるのかはわかりませんが。
0245242NGNG
>>244
cをt1から評価する場合はd、t2から評価する場合はaに
暗黙に変換してるんでないかと漠然と思ってたんだけど、
よくわからんw

c→aの変換が行われないとすると、t2.uidのユニークさ加減
によってc > aだったりa > cだったりするんかな?

> dは、nested loopされるっぽいけど、
> t1*t2の行数回、比較が行われるので
existsは条件に合致したレコードが見つかった時点で評価終了
でなかったけ?

例えばサブクエリのwhere節を外して、
select count(*) from 100万件なテーブル
where exists (select * from 100万件なテーブル);
とやってもかなりのスピードで帰ってこない?

なもんで、サブクエリの参照にインデックスが使える場合は
問答無用でexists使う習慣がついてる。

なんにせよもつかれ。続きは明日以降。
0246237NGNG
238さん、ありがとう(>_<)
0247237NGNG
ageてしまった…スンマソン
0248236NGNG
>239
スマム。235がでかい口叩いたので釣られて基本事項を挙げてしまいますた。
元々の出題をしたほうは大きい案件に携わっているとは思ってないYO!

DBはOra。
テーブルでかくても(t1を)ユニークインデックスでスキャンするよう持っていければ
existsでサブクエリ側(t2)をインデックスレンジスキャンさせるよりは格段に速いっす。
0249デフォルトの名無しさんNGNG
selectしたtableBテーブルに日付を追加して、tableAにinsertしたいのですが
どのように記述すれば良いでしょうか?
お願いします

insert into tableA select itemA,itemB,(ここにsysdateを入れたい) from tableB where id='1';
0250デフォルトの名無しさんNGNG
>>249
入れたいなら、入れろよ。
入れてエラーが出るなら、それを書け。
0251249NGNG
>>250
レスありがとうございます
記述のしかたがわからないんです・・・
insert into tableA select itemA,itemB,sysdate from tableB where id='1';
と書くと、
ERROR 1054: Unknown column 'sysdate' in 'field list'
0252そもそもNGNG
>>251
sysdateって、関数なのでは?
insert into tableA select itemA,itemB,sysdate() from tableB where id='1';
でどうでしょ?
0253そもそもNGNG
あっ、DBはオラクル?
もしそうなら、sysdate()はエラーになってしまいますね。
ごめんなさい。
0254249NGNG
>>253
resありがとうございます
DBはMySQLです
こんな感じかなと思ったんですけど、ど忘れしちゃいました・・・(w
insert into tableA select itemA,itemB,to_char(sysdate,'yyyymmdd') from tableB where id='1';
別の方法で日付入れよかな・・・
0255デフォルトの名無しさんNGNG
そりゃ SYSDATEなんて列ないんだから無理でしょ
インサート テーブルA
XX.A
XX.B
   (セレクト A、B
   フロム B
   ウェアー ID=1) XX
SYSDATE

イメージはこんな感じになるのでは?
0256 NGNG
>>254
おまえは、sysdateの記述の仕方もわかってなかったのか?

sysdateの使い方は、マニュアルを読め。

インサートの項目に入れるには、それからだ。
0257254NGNG
>>255の文みて記述の仕方思い出しました(w
>>255-256 ありがとうございましたm(_ _)m
0258241NGNG
>245

そうやねーoptimizerで吸収されとるわ。
existsのとこt1*t2はないっすね。aのが早い場合もあるんだろうけど、
indexあったらdっすね。一つ勉強になったよ。
0259デフォルトの名無しさんNGNG
あげ
0260デフォルトの名無しさんNGNG

●●●●●●●●「オセロさえ納期内に作れない=OO役立たず 」祭り●●●●●●●
/|         |  |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
  |         |  | ̄ ̄ ̄ /|                    ||
  |         |  |   / /|TTTTTT   TTTTTTTTTT||TTTTT
  |        /\ |  /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|
  |  /  /  |文|/ // /
  |/  /.  _.| ̄|/|/|/         Λ_Λ
/|\/  / /  |/ /           (___)
/|    / /  /ヽ            /〔 非OO 〕〕つ
  |   | ̄|  | |ヽ/l            `/二二ヽ
  |   |  |/| |__|/   Λ_Λ     / /(_)
  |   |/|  |/      ( ´∀`)   (_)    Λ_Λ
  |   |  |/      // /  ^ ̄]゚        (`   )
  |   |/        ゚/ ̄ ̄_ヽ         ⊂〔〔 非OO 〕
0261デフォルトの名無しさんNGNG
貴重なお時間を削ると思いますが
どなたか教えて下さい

請求残高に
得意先ID 残高
001 20000
002 30000
003 50000

売上明細に
伝票No 日付 得意先ID 行No 明細…
00001 140601 001 01
00001 140601 001 02
00002 140601 003 01
00002 140601 003 02
00003 140603 003 01
00003 140603 003 02

とある時、SQLで結果を
得意先ID 残高 伝票No 日付 行No 明細…
001 20000 00001 140601 01
001 20000 00001 140601 02
002 30000
003 50000 00002 140601 01
003 50000 00002 140601 02
003 50000 00003 140601 01
003 50000 00003 140601 02

としたいのですが、なかなかうまくいきません
お手数とは思いますがどなたかご教授して下さいませんでしょうか?
0262 NGNG
select b.得意先ID, a.残高, b.伝票No, b.日付, b.行No, b.明細 from 請求残高 a,売上明細 b where a.得意先ID= b.得意先ID ODER BY a.得意先ID
0263デフォルトの名無しさんNGNG
MySQLを使用しています
このSQL文を実行すると、nameに「a」が含まれるもの意外も表示されるのですが、なぜでしょうか?

select * from testA WHERE name LIKE '%a%';

たとえば「Tシャツ」という名称もヒットしてしまいます・・・
0264デフォルトの名無しさんNGNG
シフトJISの2バイト目に「a」が含まれるからだと思ったが
違った
0265デフォルトの名無しさんNGNG
mySQLだろ?ShiftJISじゃなくてEUCじゃないの?
0266デフォルトの名無しさんNGNG
EUCだとそもそも2バイト目にはそんな紛らわしい文字は
出現し得ないからますます謎だな
0267デフォルトの名無しさんNGNG
>>263
おいらのとこではShift-JISで正常に動くよ。
MySQLバージョンいくつ?
何でクエリー発行しているの?
0268デフォルトの名無しさんNGNG
MySQL板へ逝くべし
0269デフォルトの名無しさんNGNG
レコードを追加する時にそのレコードのIDが
テーブルに存在するか確認するにはどうしたら
いいのでしょうか?
教えてください。
0270デフォルトの名無しさんNGNG
>269
exists
0271デフォルトの名無しさんNGNG
>261
select
 a.得意先ID,
 a.残高,
 b.伝票No,
 b.日付,
 b.行No,
 b.明細
from
 請求残高 a,
 売上明細 b
where
 a.得意先ID= b.得意先ID(+)
ODER BY
 a.得意先ID

オラクルならこうかな。(未確認
0272ペーパープラチナ(9i対応NGNG
>>271
さらにOracle9iなら、SQL99の書式で。(未確認)
select
 得意先ID,
 残高,
 伝票No,
 日付,
 行No,
 明細
from 売上明細
left outer join 請求残高 using(得意先ID)
order by 得意先ID;
0273ペーパープラチナ(9i対応NGNG
>>272
×
 from 売上明細
 left outer join 請求残高 using(得意先ID)
○
 from 請求残高
 left outer join 売上明細 using(得意先ID)

おっちょこちょいでスマソ。
0274263NGNG
>>267
mysql.のバージョン
mysql Ver 11.12 Distrib 3.23.33, for pc-linux-gnu (i686)

調べてみたんですが、解決方法がわかりませんでした・・・
解決するにはどうすれば良いのでしょうか?
よろしくお願いします
0275261NGNG
おはようございます
>261です

みなさんが教えて下さったおかげで解決しました
>272さんのSQL99の書式には
ものすごくおどろかされました。

返信が遅れましたこと、並びに貴重なお時間を割いてしまったこと
深くお詫び申し上げます。
0276デフォルトの名無しさんNGNG
初歩的な質問なんだが...
DB の重複している行を削除するのはどうすりいいの ?
(DBMS は、Postgres 7.2)

VALUE
-----
AAAA
BBBB
AAAA
CCCC
BBBB
DDDD

を

VALUE
-----
AAAA
BBBB
CCCC
DDDD

にしたいだけなんだが...。
0277デフォルトの名無しさんNGNG
クエリの結果から重複を無くしたいのなら select distinct 〜
0278デフォルトの名無しさんNGNG
リレーショナルデータベースというのは定義に厳密なら
そもそも重複行というものは存在しないらしい
0279デフォルトの名無しさんNGNG
やったことないんで間違ってたらすまんが、

DELETE テーブル名 WHERE VALUE ='AAAA' AND ROWNUM =1

では無理か?
0280デフォルトの名無しさんNGNG
何と何が重複してるのかあらかじめ分かってないと無理だろ
0281デフォルトの名無しさんNGNG
DELETE テーブル名 WHERE VALUE =
(select VALUE FROM テーブル名 GROUP BY VALUE HAVING COUNT(*) > 1)
AND ROWNUM > 1;

ではこれでどう? 
何か結合使ったスマートなやり方ありそうな気がするんだけど、使いなれてないからパっと思いつかん。
0282デフォルトの名無しさんNGNG
書き込んだ直後にVALUE = じゃなく VALUE IN じゃないと複数行あったときにダメだと気づいた・・・。
0283デフォルトの名無しさんNGNG
>>277
> クエリの結果から重複を無くしたいのなら select distinct 〜

う〜〜〜ん、DB から除きたいんだよね...。

実は、今は

select distinct ... した奴で新しい DB 作る
元の DB を消す。
新しい DB を元の DB の名前にリネームする。

ってやってんだけど、どう見ても美しくないよね...。

>>278
> リレーショナルデータベースというのは定義に厳密なら
> そもそも重複行というものは存在しないらしい

まあ、それはそうなんだけど...。いろいろしがらみがあって...。

>>279
ROWNUM って Postgres で使える ? とりあえず、やってみます。
0284デフォルトの名無しさんNGNG
>>283
rowid擬似列が使えるなら

delete from tbl a
where
not exists (
select 1 from tbl b
where b.value = a.value
having min(b.rowid) = a.rowid
)

とかできるけど、やっぱ

> select distinct ... した奴で新しい DB 作る
> 元の DB を消す。
> 新しい DB を元の DB の名前にリネームする。

のがいいような。
0285デフォルトの名無しさんNGNG
>>276
Oracleだったら

delete from tbl a
where a.rowid > (
select min(b.rowid)
from tbl b
where b.value = a.value
)

でしょう.
たぶん速度的にも一番速いと思うのだが.
PostgreSQL だったら rowid を oid に変更すれば OK かな?
0286439NGNG
>>285
複数行ある行の最小の rowid/oid 以上のレコードが全部消えるよ。
0287デフォルトの名無しさんNGNG
外部結合で結合したレコードがNULLだった場合を判定するスマートな
やり方or関数とかありますか?
AとBで結合してBがNULLだったらDECODE(B.nanka, NULL, 1, 0) AS B_FLGとかやってますが。
0288デフォルトの名無しさんNGNG
あ、オラクル8くらい
0289デフォルトの名無しさんNGNG
>>287
> 外部結合で結合したレコードがNULLだった場合を判定するスマートな
> やり方or関数とかありますか?

つーか、NULL だったらどうしたいの ?
単にフィールドに NULL かどうかのフラグを入れたいだけなら...

> AとBで結合してBがNULLだったらDECODE(B.nanka, NULL, 1, 0) AS B_FLGとかやってますが。

で十分スマートだと思うけど。(Oracle8 はよく知らんから、もっといい関数があるかも知れんけどね。)
0290初心子NGNG
質問です。

select a as b where b='hoge';
↑のように、ASで付けた名前をWHEREに使用できないのでしょうか?
0291初心子NGNG
すいません、fromが抜けてました。

正しくは
select a as b from c where b='hoge';
↑のように、ASで付けた名前をWHEREに使用できないのでしょうか?

です。
0292250NGNG
>>291
入れたいなら、入れろよ。
入れてエラーが出るなら、それを書け。
0293デフォルトの名無しさんNGNG
>>291
やりたいならやれよ。
やってエラーが出るなら、それを書け。
0294デフォルトの名無しさんNGNG
>>292
アフォか?
0295初心子NGNG
>>291 なんですが、無理なんでしょうか?
0296デフォルトの名無しさんNGNG
無理
0297デフォルトの名無しさんNGNG
おれが 言いたいのは、エラーが出たときに、そのエラーが 何を言ってるのか知れということだ。

つーか 291が 何をやりたいのか さっぱりわからん(w
asなんかで 名前つけるってのが、わかんねぇ。
なんで 名前つけないと あかんのや。

つーか 別名のつけ方ってのが あるだろ。
フィールドに対して、別名がつけられるかどうかは 知らんが。
0298デフォルトの名無しさんNGNG
>>297
氏ね
0299デフォルトの名無しさんNGNG
>297
はい?
0300デフォルトの名無しさんNGNG
>>297 は真性だな・・・
0301デフォルトの名無しさんNGNG
あんなり言うなよ
可哀想だろ (w
0302デフォルトの名無しさんNGNG
あんなりだってダサ
0303デフォルトの名無しさんNGNG
>>297
> つーか 291が 何をやりたいのか さっぱりわからん(w

マジで>>297は>>291の質問の真意をわかってねえんだろうな
笑ってる場合じゃねえと思うぞ
0304デフォルトの名無しさんNGNG
誰もわかっていないから 答えられない罠
けなすのは 人一倍得意だけどな(w
0305ペーパープラチナ(9i対応NGNG
>>291
うん、できないです(^^;

でも
select b from ( select a as b from c)
where b='hoge';
ってやった場合は出来ますけど
こんな事を言ってるんじゃないですよね・・・。たぶん。
0306ペーパープラチナ(9i対応NGNG
>>303に激しく同意。

なんでSQLくらい教えるのに>>297みたいに
がなりたてるのか、さっぱり解らない。
0307 NGNG
内部プロセスの順番で、最終的にselect句である
結果セットのフィールドに別名を割り当てているから
じゃないかな。

似た話で、order by句に対象計算カラムの別名ではなく
select句と同じ計算カラム(sumとか)をもう一度書か
なくてはいけないというのもある。

>>305の例もまずfrom句の中間ビューが作成され、
カラムにはbという名前で割り当てられるから
bという別名でアクセスしなければいけないのだろう。
0308デフォルトの名無しさんNGNG
つかRDBMSによって違うよね。
Oracleなら>>305みたいにインラインビュー使う。
9i以降ならwithでそれっぽいことができるのかな?
Accessは少なくともselect節、もしかすると全域で別名の後方参照ができる。
MSSQLは知らない。もとい、他は知らない。

>>307
Oracleはorder byには別名使えてgroup byには使えなかったりする。
いまいち納得いかないんだよなー。
0309デフォルトの名無しさんNGNG
>>308
納得いかなくない。
order by は結果セットに対してgroup byはテーブルに対してかかるのだから
その動きは直感的です。
>>308が言ってる事は>>290の質問と同じだよ。テーブルに対してかかるものを
別名つけられなくても、別に困らないし、逆に別名が有効になれば混乱する。
0310デフォルトの名無しさんNGNG
>>309
>納得いかなくないことない。
それは、RDBMSの実装上の都合。
0311デフォルトの名無しさんNGNG
>>310
実装上の都合じゃないでしょ。後方参照の実装なんて簡単だし。
思想の違いでしょ。
俺はT-SQLの方がいやだ。
0312デフォルトの名無しさんNGNG
>>311
はぁ?
order by,group byの書き方知ってるの?
0313デフォルトの名無しさんNGNG
>>312
わかんにゃい。おしえて
0314デフォルトの名無しさんNGNG
(°Д°)<書いてません。打ち込んでるだけです。(プ
       お前は何か?タブレット使ってSQL書き込んでのか?あ?


0315308NGNG
>>309
んでも結果セットに無い列もorder byで使えるじゃん。
それに比べてgroup byは不便だなぁ、と思ってしまうのです。
言わんとするところは解ったけど。

group byにコピペするかインラインビューを一段増やすかで
不毛に悩むのがだるい。
0316デフォルトの名無しさんNGNG
PocketPCの手書き入力でSQL書いてますが、何か?
いやネタじゃなくて(泣
0317デフォルトの名無しさんNGNG
withってどうやって使うか、誰かキーワードだけでも教えてくんないかな
googleで検索しようとしても「withは一般的な〜」とか言われて検索できんのよ
0318ペーパープラチナ(9i対応NGNG
>>317

こんな感じです。WITH句を使うと、中間ビューを事前に定義できます。
WITH
tbl_alias AS
(
SELECT col1,col2 FROM tbl_a
WHERE col1='hoge'
)
SELECT col1,col2 FROM tbl_alias;

SQLの書式を調べるなら、Oracleよりマニュアルをダウンロードした方が
てっとり早いと思いますよ。
0319デフォルトの名無しさんNGNG
>>317
「+with」で検索しる
0320デフォルトの名無しさんNGNG
oracleなんだけど、既に行が存在するviewで列の追加ってどうしたらいいの?
0321デフォルトの名無しさんNGNG
alter view
0322デフォルトの名無しさんNGNG
>>320
viewってのは、テーブルを結合して 見せてるだけのものなのだ。

だから、viewに追加するのではなく、元のテーブルに追加するのだ。
0323デフォルトの名無しさんNGNG
>>322
元のテーブルにはあるけど今までviewとして見せていなかったものを
新たに見せたいって話じゃないの?
すでに>>321で答えが出てるけど。
0324320NGNG
>>321
サンクスコ

>>322
323が説明してくれた通り。わかりづらい聞き方でスマソ


ところでまた質問なんだけど、SELECT文とか使うときに全フィールドの
中身を取り出す場合には select * from テーブル名、という風に
「*」が使えるよね?だけどROWNUMとか使う場合だと
select 全部のフィールド名カンマ区切り,ROWNUM as id from テーブル名
とかやらないと出来ない気がするんだけど、
select *,ROWNUM as id from テーブル名
みたいなノリで出来ないの?いちいち全フィールド名書くのがメンドイ。
0325デフォルトの名無しさんNGNG
>>324
select テーブル名.*,ROWNUM as id from テーブル名
0326320NGNG
>>325
うおおお朝っぱらからありがとう!
大変助かりまする
0327デフォルトの名無しさんNGNG
質問です。

・入力必須項目なし
・検索項目は3つ
・AND条件で絞込み

以上の条件を満たす検索画面で作られるSelect文を
CやJavaのプログラムで効率よく書くにはどうしたら良いでしょうか?

select * from TABLE where ColumnA = 'a'
               and ColumnB = 'b'
               and ColumnC = 'c';

普通に書くと一番長い場合こうなりますが、
検索条件の入力がない場合など、色々組み合わせを考えて
select文の文字列を力ずくで作るのはなんだか格好悪いですし、
検索条件が増えたときなど保守性にも欠ける気がします。

なにか王道などあればよいのですが・・・
0328デフォルトの名無しさんNGNG
>>327
> 検索条件の入力がない場合など、色々組み合わせを考えて
> select文の文字列を力ずくで作るのはなんだか格好悪いですし、

そんなに組み合わせあるか ? 要は...
[ when Condition1 = 'Value1' [ and Condition2 = 'Value2' [and ...]]] って言う文字列作るだけだろ ?
一番最初だけ例外的に 'when ' がつくだけで、後は 'and ' と条件式を付加していけば良いだけ。3個だろうが 1,000個だろうが一緒だよ。

> なにか王道などあればよいのですが・・・

そんなもん無いから、地道に考えろ。
0329デフォルトの名無しさんNGNG
>>328
回答有難うございます。
ちょっと質問の仕方が大げさ過ぎたかも知れないです。

>>328のように私も処理していますが、
もっといい方法がないかと思いまして・・・
他人のソースを見て、「なるほどね、そういうのもありか」と
感心するケースがまだ多いです。

>地道に考えろ。
これが王道でした。もっと勉強して洗練させていきたいです。
0330デフォルトの名無しさんNGNG
>>327
プログラム側で条件変化するクエリ文字列を作成する方法だよね?
漏れはこんな感じでやることが多い。
query = "Select * From table Where (0=0) "
+ (Aが指定されてる)?" And ColumnA = " + A:""
+ (Bが指定されてる)?" And ColumnB = " + B:""
+ ...

ポイントはベースとなる部分に Where (0=0) など必ず真になる式を書いておく。
すると以降の条件文字列を同じように結合していくことができる。
(最初の条件だったら Where それ以降だったら And という判断をしなくて良い)

プログラム側の指定によってセレクトする列が変わるときは…
まぁ、いろいろとテクニックがあるのですよ。
0331デフォルトの名無しさんNGNG
SQLの初心者です。
質問です!

Commit(更新確定)というのは、DB内のあるテーブルだけを指定して行う
ことは可能でしょうか?
もし可能なら、やり方を教えていただけませんか?

それとも、DB全体に対してしかできないのでしょうか?
0332 NGNG
>>331
 コミットって、テーブルとかDBとかに対してではなくて、
 トランザクションに対して行われるものでは?
 考え方からして、間違っていませんか?
0333ESNGNG
sqlの初心者です。
一番新しい日付だけを取得したいのですが
どう書けばいいのか教えていただけないでしょうか?
0334デフォルトの名無しさんNGNG
>>333
select max(日付) from テーブル group by 日付;
0335デフォルトの名無しさんNGNG
違うだろが
0336ESNGNG
あ すいません
接続するのはMYSQLです。・・・

>>>334さん
ありがとうございますm( )m
トライしてみます。
0337デフォルトの名無しさんNGNG
いや… だから… >>333 のは間違っているのだよ。
0338337NGNG
すまん。間違ってるのは >>334 の SQL な。
0339デフォルトの名無しさんNGNG
F1グループのなかでF2が最大のものを選ぶ

TABLE:

ID  F1  F2
----------------
1   1   1
2   1   2 
3   2   1


SELECT F1, MAX(F2) AS M FROM TABLE GROUP BY F1

とすると

F1  M
---------
1   2 
2   1


これを SELECT * FROM -----


ID  F1  F2
----------------
2   1   2 
3   2   1


と求めたいのです。
SQLの書き方を教えてください
0340デフォルトの名無しさんNGNG
SELECT ID,F1, MAX(F2) AS M FROM TABLE GROUP BY F1 か?
0341デフォルトの名無しさんNGNG
>>340
ありがと
漏れもそれやったんだけど、
IDがGROUP BYに入ってないからだめだと言われて・・・
0342デフォルトの名無しさんNGNG
>>339
SELECT
 MIN(ID),
 TABLE.F1,
 TABLE.F2
FROM
 TABLE,
 (SELECT F1, MAX(F2) F2 FROM TABLE GROUP BY F1) MAX_TABLE
WHERE
 TABLE.F1 = MAX_TABLE.F1 AND
 TABLE.F2 = MAX_TABLE.F2
GROUP BY
 TABLE.F1,TABLE,F2;

by oracle
未確認、たぶんいけるとおもうけど
0343339NGNG
>>342 おぉ神!ありがと
やってみる
0344334NGNG
>>336
すまん、group by 日付 は不要だ。(何で、こんなもんつけちゃったんだろ...。)
単純に、select max(日付) from テーブル; で OK だ。
0345ペーパープラチナ(9i対応NGNG
F1列の値に対して、F2列の値が重複してもいいなら
こんな感じですね。(※テスト環境 Oracle9i)
意図と反してたらゴメンなさい。

DROP TABLE t_test;
CREATE TABLE t_test
(
id varchar2(10) PRIMARY KEY,
f1 varchar2(10),
f2 varchar2(10)
);
INSERT INTO t_test VALUES('01','1','1');
INSERT INTO t_test VALUES('02','1','2');
INSERT INTO t_test VALUES('03','1','3');
INSERT INTO t_test VALUES('04','2','1');
INSERT INTO t_test VALUES('05','2','2');
INSERT INTO t_test VALUES('06','3','1');
INSERT INTO t_test VALUES('07','3','0');
INSERT INTO t_test VALUES('08','3','5');
INSERT INTO t_test VALUES('09','3','5');
INSERT INTO t_test VALUES('10','3','0');
COMMIT;

SELECT
id,
f1,
f2
FROM t_test
WHERE
(f1,f2) IN
(SELECT f1, MAX(f2) FROM t_test GROUP BY f1);
0346339NGNG
>>342 神様
直接やってみたらエラーがでたけど342を鬼のように見ていたら
突然

SELECT * FROM TBL_SIMPLE
WHERE F2 = (SELECT MAX(S.F2) FROM TBL_SIMPLE S WHERE S.F1 = TBL_SIMPLE.F1)

を思いついた。ありがとう。
0347デフォルトの名無しさんNGNG
>>346
そのSQL、なんか変じゃねぇか?
0348デフォルトの名無しさんNGNG
>>342
ああ、SQLの書き方でそんなのはじめてみた。
真似させてもらう。SAGE。
0349デフォルトの名無しさんNGNG
>>347
ORACLEしか知らないけど、変じゃないよ。
レコード数増えると2次曲線的に重くなりそうだけど。
0350デフォルトの名無しさんNGNG
>>339

>>345のテーブルを借用するならば・・・
select * from t_test
where (F1,F2) IN (select F1, MAX(F2) from t_test group by F1);

ID F1 F2
---------- ---------- ----------
03 1 3
05 2 2
08 3 5
09 3 5

これが一番簡単なんではないのか?
汎用性があるのかはしらんが・・・
(Ora R8.1.7で確認)
0351350NGNG
すまん、思いっきり結果がずれたな・・・
行途中の半角スペースも消されるんだっけか。
見ればわかるとは思うが。

ID     F1     F2
---------- ---------- ----------
03     1      3
05     2      2
08     3      5


09 3 5
0352339NGNG
>>350
それだ!
うん、シンプル。
みんなありがとう。
お陰で家に帰れたヨ。
0353350NGNG
>>352
家に帰れて良かったなー。
この次、俺が困ったら必ず助けるように。

最近は、TeraTermと秀丸のマクロで
苦しめられたよ。
#もっと、DBの仕事がしてー!!!!
0354デフォルトの名無しさんNGNG
はじめてtablespaceから作ってみたんですが、
unlimited tablespaceの権限をつけてあげないとテーブル自体が
表領域に作れないんですね。(もちろんテーブルスペース作る権限は持ってますよ)

いつもDMLしか触らせてもらえないから知らなかったです。
0355350NGNG
>>354
寝る前に、答えておく。
QUOTAを調べるが良し!!
0356デフォルトの名無しさんNGNG
なんでも権限だしなぁ。

そのうえUNIXときたら 頑固だしね。
0357デフォルトの名無しさんNGNG
>>356
ロールつけてやるだけじゃまったく足りないよね。
connectのロールなんかくだらないものしか入っとらん。
結局grantかよ。。。。
0358デフォルトの名無しさんNGNG
age
0359デフォルトの名無しさんNGNG
grant age to >>1;
0360名無しぃNGNG
revoke connect,age from >>1;
0361デフォルトの名無しさんNGNG
DROP USER デフォルトの名無しさん;
0362デフォルトの名無しさんNGNG
grant drop >>360のレス,age to >>1;
revoke create 新レス from >>360;
0363SQL ◆Wij7wZFpXs NGNG
最強SQLハケーン

SELECT 'GIKO'

どうよ
0364デフォルトの名無しさんNGNG
drop user SQL ◆Wij7wZFpXs ;
0365デフォルトの名無しさんNGNG
ここって香具師ばかりだな
こんなとこにいる漏れも香具師か・・・・
0366 NGNG
>>365
>ここって香具師ばかりだな
>こんなとこにいる漏れも香具師か・・・・
はぁ?
0367365NGNG
>>366
「かぐし」って厨房のことだろーが
それくらいも知らねーのか(藁
0368デフォルトの名無しさんNGNG
>>367
ひさびさにワロタ
0369デフォルトの名無しさんNGNG
>>367
自分、アホの子やね。
0370デフォルトの名無しさんNGNG
>>369
プ
お前も香具師ダナ
0371デフォルトの名無しさんNGNG
          + 激しく脱線 +

           _l\        
       /⌒/   l       
       ( ヽ ヽ_/ノ       
      ⊂(__∪ー∪        



0372デフォルトの名無しさんNGNG
香具師 = かぐし = 厨房
新生2ちゃんねる語の誕生です。
0373デフォルトの名無しさんNGNG
さて,>>367の投稿ですが,一体どこに晒したらいいと思う?
0374デフォルトの名無しさんNGNG
香具師 = 香貝死 = マン臭で死亡した奴
0375デフォルトの名無しさんNGNG
>>372

違うだろ〜〜〜
ヤツ→ヤシ→香具師
となっただけ。
っつーか、ダウソ板の流れだろうな、コリは。
0376372NGNG
>>375
俺につっこむなよw
元はぁ方面の言葉だね。
0377デフォルトの名無しさんNGNG
>>372
激しく支持
皆で広めようぜ
0378デフォルトの名無しさんNGNG
367ってスゲー
0379デフォルトの名無しさんNGNG
>>375
それくらいカグシでも知っとる。
0380デフォルトの名無しさんNGNG
>>370のはじけっぷりが気持ちいい。
「プ おまえもカグシだな」
「プ おまえもカグシだな」
0381デフォルトの名無しさんNGNG
>>370って頭いいね。
俺なんかずーっとヤシって読むのかと思ってた。
0382デフォルトの名無しさんNGNG
>>381
>ずーっとヤシって読むのかと思ってた
うそつけこのカグシ野郎。
2chで初めて知ったんだろ。
0383デフォルトの名無しさんNGNG
>>382
つーか 2chでしか 盛んに使われてない・・・。

おれも、ここ見てなかったら、そんな言葉は シラネぇ。
0384デフォルトの名無しさんNGNG
>>383
知ってる方が変。
常用漢字じゃない罠。
0385デフォルトの名無しさんNGNG
なんで「ヤシ」って2文字で変換してるのに、3文字で変換されるの?
0386デフォルトの名無しさんNGNG
>>384
常用漢字しか使われてないようだが?
0387デフォルトの名無しさんNGNG
>>385
当て字という罠
0388デフォルトの名無しさんNGNG
ここで もう一度
>>365
を見て 笑ってみよう!
0389ペーパープラチナ(9i対応NGNG
名スレの予感...
0390デフォルトの名無しさんNGNG
香具師=厨房

やったー!
0391デフォルトの名無しさんNGNG
こんな地味なスレを見つづけてきた甲斐がありました。

ありがとう >>365
0392デフォルトの名無しさんNGNG
「香具師」のどこが「ヤ」でどこが「シ」なんだ?
「香」が「ヤ」で「具師」が「シ」?
「香具」が「ヤ」で「師」が「シ」?
0393デフォルトの名無しさんNGNG
>>392
そんなことに疑問をもつな。このカグシ野郎!
0394デフォルトの名無しさんNGNG
カグシ ワショーイ!
0395デフォルトの名無しさんNGNG
ただいま「カグシ ワショーイ祭り」開催中です。
0396デフォルトの名無しさんNGNG
いまどき カグシなんて 言葉で 流行らん。

今、ここでは ブームに なりつつあるけど(w
0397デフォルトの名無しさんNGNG
>>396
おぉ
365降臨!!
0398デフォルトの名無しさんNGNG
良スレだったのに香具師に荒らされて終わるのか・・・
0399デフォルトの名無しさんNGNG
ここ香具師ばかりだな
0400デフォルトの名無しさんNGNG
select レス番号 from このスレ where デフォルトの名無しさん=香具師;
0401デフォルトの名無しさんNGNG
>>400

レス番号
--------------------
365

1行が選択されました。
0402デフォルトの名無しさんNGNG
かグシ はネタだろう。普通重箱読みはしないもの。
コウグシと間違ったなら判るけど・・・まあコウグシも正しい読み方だが 
0403デフォルトの名無しさんNGNG
>>400
>>401
ワラタ
0404402NGNG
スマン 重箱読みじゃなくて 湯桶読みだな・・・・ 恥ずかしい
0405デフォルトの名無しさんNGNG
                      + 激しく香具師 +
            X
      ∠ ̄\∩
        |/゚U゚|丿
      〜(`二⊃
       ( ヽ/
        ノ>ノ
       UU
0406デフォルトの名無しさんNGNG
>>402
>まあコウグシも正しい読み方だが
コウグシなんていう読み方ないぞ。
あったらオレが「カグシ」だが(ワラ

逆に「かぐし」をATOK15で変換すると
ヤシの誤読と出た(フラ
まぁ、おもろいのは香具師=厨房の使い方
なんだがな。だからどうみてもネタじゃ
ないだろう。

さては402=404=365か
365素直に出てこい、折れたちは待ってるゾイ
0407デフォルトの名無しさんNGNG
>>406
> コウグシなんていう読み方ないぞ。

「こうぐし」は、一応正しい読み方だよ。

と言うことで、

insert into 2ch (レス番, 読み) values(402, 'カグシ');

しとくね。
0408402NGNG
フォローありがと

いちおう自分でも
http://www5.ocn.ne.jp/~tango/jisyo_file/yashi.htm
http://dictionary.goo.ne.jp/cgi-bin/dict_search.cgi?MT=%B9%E1%B6%F1%BB%D5&sw=2
0409デフォルトの名無しさんNGNG
コウグシという読みあったんだ。
漏れがホントにカグシだった。。。
0410デフォルトの名無しさんNGNG
マターリカグシマツリカイサイチュウ
0411デフォルトの名無しさんNGNG
とにかくだ、香具師=厨房にしようぜ
読み方はカグシで

各板で使って広めよう。最初はここと同じ反応でバカにされる
だろうがな。徐々に馴染んでくるだろう。
そして、我々は新2ch用語の誕生に立ち会うのだ。
0412デフォルトの名無しさんNGNG
>>411
や、オーバーライドは無理だろ。
カグシ = 厨房ならまだ可能性があるかもしれないけど。
0413デフォルトの名無しさんNGNG
香具師=厨房 だと 思っているボケがいるのは ここのスレですか?
0414デフォルトの名無しさんNGNG
oracleってどうアンインストールすればいいんだよ!
Univarsal Installer使ってもゴミ残りすぎ。
レジスト消しても再インストしようとしたら前のSID名とか残ってるしよ!
Windows入れるよりたちが悪いな。
0415デフォルトの名無しさんNGNG
>>414
知るかよ。スレ違いもはなはだしい。
0416デフォルトの名無しさんNGNG
>>414
そんな SQLは ありません(w
0417デフォルトの名無しさんNGNG
>>414
レジストリのサービスの箇所でSIDのキー
を本当に消したか?
このカグシ野郎。
0418デフォルトの名無しさんNGNG
>>414
レジストリの中を検索して
削除するのは、もはや暗黙の了解となってるのだよ。
このカグシ野郎が!
0419デフォルトの名無しさんNGNG
>>414スレ違いだ。だからカグシって呼ばれちゃうんだよ。
0420デフォルトの名無しさんNGNG
>>413
違います。香具師=厨房 だと 思っているカグシがいるスレです。
わかったかこのカグシ野郎
0421デフォルトの名無しさんNGNG
カグシ
キタ-----------------------!
0422デフォルトの名無しさんNGNG
カグシ━━━━(゚∀゚)━━━━!!!!!!
0423デフォルトの名無しさんNGNG
ある意味、365は神。

















疫病とか、貧乏とか、そっち系の。
0424デフォルトの名無しさんNGNG
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< カグシカグシ!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< かぐしかぐしかぐし!
かぐし〜〜〜!   >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /
0425デフォルトの名無しさんNGNG
貧乏神だったのかぁ〜〜〜
神様にお願いするときは、神様を指定しないとダメなのね(w
貧乏神に 幸せにしてくださいと 願ってもかなえてくれるわけないよなぁ(w

つーか、神は 複数いねぇけどよ(w
0426デフォルトの名無しさんNGNG
>>425
何言ってるのか不明。
独り言なのか?

かぐしage
0427デフォルトの名無しさんNGNG
>>425もカグシ━━━━(゚∀゚)━━━━!!!!!!
0428デフォルトの名無しさんNGNG
>>1-427=カグシ
0429デフォルトの名無しさんNGNG
ガイドライソ板からきますた

ヴァカがいるスレはここですか?
0430デフォルトの名無しさんNGNG
はい、ここです。
0431デフォルトの名無しさんNGNG
>>430
ヴァカではなく、カグシがいるスレです。
0432デフォルトの名無しさんNGNG
A|B
-+-
1|a
2|(null)
3|c

というテーブル1と

A|C
-+-
1|d
2|e
3|f

というテーブル2があって、AとBを得たいのですが、Bが(null)だった場合テーブル2のCからAが同じレコードのCを取ってきて、
それをフェッチでだらだら処理したいのです。
selectにifnullとかいうのを使うととって来れそうなのですが、別テーブルにあるレコードの参照が分かりません。
select A,ifnull(B,C) from 1,2;
とかやったらAのフィールドが被ってるじゃねえかよ、ゴルァと怒られてしまいました。
多分、AやB,Cをどのテーブルからという指定ができればいいと思うんですが、どうやったらいいですか?
下らない質問をするカグシと思わずに、どうぞご教授下さい。
0433デフォルトの名無しさんNGNG
select A,ifnull(1.B,2.C) from 1 left join 2 on 1.A=2.A
で解決しました。いや、解決かどうかは分かりませんが、欲しいデータは取れました。
これであってますか?
0434デフォルトの名無しさんNGNG
433=432です。
0435!=710 だけど...NGNG
>>432
Access は ifnull() 使えないみたいなので、動くかどうかは試してないけど...

select テーブル1.A,ifnull(テーブル1.B, テーブル2.C) AS B from テーブル1 left join テーブル2 on テーブル1.A = テーブル2.A;
0436デフォルトの名無しさんNGNG
あ、レスどうもです。AS Bってのを使うと、ifnull〜がBで参照できるんですよね、多分。それで逝ってみます。
0437デフォルトの名無しさんNGNG
ifnullてことはPostgre?
なんとなく外部結合にしなくてもいいような気がするけど
2.Cのとこでコケるか。あってるんじゃないでしょうか
曖昧なカグシですまん
0438デフォルトの名無しさんNGNG
>>432よ、カグシな俺が教えてやろう。

select '1' A, 'a' B from dual table_a
union all
select '2' A, 'e' B from dual table_a
union all
select '3' A, 'c' B from dual table_a;

で万事解決だ。よろこべ>>432よ。
0439デフォルトの名無しさんNGNG
>>437
MySQLです。DBS書かないダメなカグシでしたね。
>>438
すみません。今週末から始めたばっかりなので、理解できません。
0440デフォルトの名無しさんNGNG
>>439
>>438 は、ネタのくせに sage もできない厨房だから、無視しとけ。
0441デフォルトの名無しさんNGNG
が、ガイドライソ板から来ますた。
カグシさんはどこですか?
0442デフォルトの名無しさんNGNG
カグシの楽園へようこそ!!
0443山太郎NGNG
響きが「グワシ」に似てるな・・・
0444   NGNG
select カグシ from 2ch
0445デフォルトの名無しさんNGNG
select カグシ from 2ch where スレッド='SQL教えて〜!!<2>'
0446    NGNG
445件のカグシが選択されました
0447デフォルトの名無しさんNGNG
このスレは カグシ教えて〜!! の スレに なりました(w
0448デフォルトの名無しさんNGNG
delete from
2ch
where
kakikomi like '%ガクシ%' ;

commit;
0449 NGNG
2000/10/21
2000/10/22
2000/10/23
2001/10/21
2001/10/22
2001/10/23
2002/10/21
2002/10/22
2002/10/23

↑こういうデータ(Date型)の中から
2000、2001、2002って抽出したいんですけど
どうやればいいのでしょうか?
0450 NGNG

>>449
SELECT LEFT(Data, 4) from kagushi;
0451449NGNG
>>450
ありがとうございます。
上手くいきませんでした。

やりたいことは、何年のデータがあるのかを知りたいのです。
2000、2001,2002の3っつがわかればいいのですが。
0452デフォルトの名無しさんNGNG
>>451
SELECT DISTINCT YEAR(myDateColumn)
FROM MYTABLE
ORDER BY YEAR(myDateColumn)

おまえの環境はわからんが、だいたいの実装に年だけを取得する関数があるはずだ。
0453デフォルトの名無しさんNGNG
SELECT LEFT(Data, 4) from kagushi;
ここの Dataってのは、
2000/10/21
2000/10/22
2000/10/23
2001/10/21
2001/10/22
2001/10/23
2002/10/21
2002/10/22
2002/10/23
が 入った 項目名のことだぜ。
ま、 重複しているのを なくすってならば、GROUP BY だっけかな、
を つけたせば OK だ ちょんまげ〜
0454449NGNG
>>452-453
distinctで出来ました。
ありがとうございました。

0455デフォルトの名無しさんNGNG
update 'SQL教えて〜!!<2>'
set 名前='カグシ'
where レス in (450,453)
0456デフォルトの名無しさんNGNG
SQL>select * from "SQL教えて〜!!<2>"
2>where "名前" = 'カグシ';

レス 名前
---- ------
438 カグシ
450 カグシ
453 カグシ

3 件が選択されました

SQL>
0457デフォルトの名無しさんNGNG
create view 厨房 as 香具師 うんぬん
0458デフォルトの名無しさんNGNG
INSERT INTO SQL教えて〜!!<2>
(レス番, 話題)
VALUES
(458, 'カグシネタはそろそろ終わりませんか')
;
0459デフォルトの名無しさんNGNG
>>458
select '>>365なのか?こういうのが続きまくるのが2ちゃんなのだ。'
INTO 458
(T-SQL風)
0460デフォルトの名無しさんNGNG
香具師
↓
椰子
↓
椰子からナデラ
↓
洗剤
↓
台所
↓
厨房

∴香具師≡厨房
0461デフォルトの名無しさんNGNG
∴風が吹く=桶屋が儲かる
0462デフォルトの名無しさんNGNG
categoryid   categoryseq   categoryname  categorytitle parentcategoryid
---------------------------------------------------------------------------------
1          1     top   トップページ
2         300         haiku       俳句            1
3         308         backnumber   バックナンバー     2
4         304         merumaga    メールマガジン     2
5         306         etc        いろいろ          2
6         419         tanka       短歌      1
7         456         def        かきくけこ        7
8         478         pqr        さしすせそ        7
9         489         stu        たちつてと        7


というテーブルがあり、
categoryname が「haiku」と一致するレコードと、
parentcategoryid が「上記レコードのcategoryid」と一致するレコード
を集めて、それを、categoryseq でソートしたいのですが、
(つまり、上記例では、2、4、3、5のレコードが抽出されるようにしたいのですが)
SQL文がわかりません。

$SQL ="SELECT * FROM CATEGORYMASTER foo WHERE CATEGORYNAME = "haiku" UNION ".
"SELECT * FROM CATEGORYMASTER bar WHERE bar.PARENTCATEGORYID=foo.CATEGORYID ORDER BY CATEGORYSEQ";

とやってみたものの、1件もひっかからず。
どうすればいいのでしょうか?
0463デフォルトの名無しさんNGNG
select t2.* from CATEGORYMASTER as t1 left join CATEGORYMASTER as t2 on t1.CATEGORYID=t2.PARENTCATEGORYID where t1.CATEGORYNAME='haiku' order by t1.CATEGORYSEQ;
0464デフォルトの名無しさんNGNG
SELECT * FROM CATEGORYMASTER WHERE CATEGORYNAME = "haiku"
UNION
SELECT * FROM CATEGORYMASTER
WHERE PARENTCATEGORYID IN (SELECT CATEGORYID FROM CATEGORYMASTER WHERE CATEGORYNAME = "haiku")
order by categoryseq

DBMSによって、テーブル名に修飾付けたり、このままじゃORDER BYできないかも
しれないけど、大体こんな感じ。

0465デフォルトの名無しさんNGNG
最後は order by t2.GATEGORYSEQ の間違い
0466デフォルトの名無しさんNGNG
>>465=463
0467デフォルトの名無しさんNGNG
>>462

その条件だと 1と6のみの ような気がするのだが。
0468教えてください〜NGNG
access97使ってるのですが

文字列内の改行の入ってる文を、入れたいのですが、どおしたらいいのか
わかりません。

"AAABBB"をAとBとの間に改行を入れたいのです。

"AAA
BBB"

Accessのクエリーだとできるのですが・・・
クエリーをSQLで表示させると
サンプル=テーブル名 文字列=フィールド名

UPDATE サンプル SET サンプル.文字列 = "AAA
BBB";

SQLで書き方があったら教えてください。
0469デフォルトの名無しさんNGNG
>>468
Accessだよね?
char(int n)
だか
chr(int n)
だか忘れたけど、そんなんなかったけか?
0470教えてください〜NGNG
char(int n)ってどんな感じで使うのですか?
0471デフォルトの名無しさんNGNG
>>470
Chr(13) & Chr(10)

Chr(13)はキャリッジリターン
Chr(10)はラインフィード
0472教えてください〜 NGNG
AAA & Chr(13) & Chr(10) & BBB
ッて感じでいいんでしょうか?

とにかく、試してみます。
ありがとうございます。
0473カグシのみなさん教えてください〜 NGNG
SQL始めたばかりの初心者ですが宜しくお願い致します。

SELECTで空白の列を出力させたいのですが、方法が判りません。

select 列名1,列名2,空白の列,列名3 from テーブル1

列名1 列名2 空白の列 列名3
----- ---- -------- ------
カグシ ヤシ コウグシ

と出力させたいのです。

テーブル1には,空白の列は無いです。列は作成することが出来ません。。。
dualやなんかを使うのかなぁ?などと考えたのですが、
判りませんでした。

ご教授宜しくお願いします。
0474カグシのみなさん教えてください〜NGNG
そっか半角スペースがきえるんだたyo


列名1 列名2 空白の列 列名3
----- ---- -------- ------
カグシ  ヤシ       コウグシ

と出力させたいの間違いです。
よるしく
0475デフォルトの名無しさんNGNG
select 列名1,列名2,'',列名3 from テーブル1
0476カグシのみなさん教えてください〜NGNG
ウェーン
475サン アリガトン
コンナニカンタンダタノカヨ、、、、デキタヨママン
475サン アリガトン
コレデイエニカエレルヨン
475サン アリガトン
0477デフォルトの名無しさんNGNG
ネタダネ
0478デフォルトの名無しさんNGNG
>>477
ビミョ〜〜〜。全くの初心者なら、マジでもおかしくはない。
結構参考書とかに載ってなかったりするし。
0479デフォルトの名無しさんNGNG
難しく考えすぎて・・・って奴じゃねえの。ハマってる時ってだいたいそれだったりするんだよな。
0480デフォルトの名無しさんNGNG
はまる以前の問題のような気もしないが...

基礎の本から読んだ方がいいと思う
0481GunballNGNG
すいません、質問です。
たとえばUNIXで造ったC言語の年間売上データをSQLを使ってDBに落として
そのデータをSQL使って月毎の集計を出す。というのはどのようにすれば
良いのでしょうか?
0482デフォルトの名無しさんNGNG
>>481
>C言語の年間売上データ

コンパイラでも作ってるんですか?
0483GunballNGNG
すいません。UNIXでC言語を使って造った年間売上データです。
0484GunballNGNG
481です。全部自動でやってくれるPGということです。
手動ならできるんだけど。
0485デフォルトの名無しさんNGNG
>>484
全自動のプログラマを想像してちょっとワラタ。
0486デフォルトの名無しさんNGNG
>>481
とりあえず、元データを何で作ったかは関係ない。
テキストデータなら適当なローダで入れたら
適当なスクリプトと自動起動で全自動にもなるだろ。

> そのデータをSQL使って月毎の集計を出す。
SQLは固有名詞じゃないよ。
0487デフォルトの名無しさんNGNG
>484
手動でやってる事をプログラムにさせればいい、としか言えないぞ。
0488デフォルトの名無しさんNGNG
何を質問したいか全然ワカランが
たぶん、少なくてもカラムにい「月と売上額」あるべ

そしたらグループと集計関数でいくとおもわれ
SQLの基本中の基本だから
基礎の本から読んだ方がいいと思われ
0489デフォルトの名無しさんNGNG
つーか、DB 使うほどのもんか?
0490デフォルトの名無しさんNGNG
DB使うほどのもんとはとても思えない案件ってわりとあるよ
とりあえず金を巻き上げるのにいい口実だから使ってるんだろ
0491デフォルトの名無しさんNGNG
ある日付けから、さかのぼって10日分のレコードが
ほしいときはどうやったらいいでしょうか?
テーブルの内容は日曜日とか土曜日とか祝日とかが
飛び飛びであいています。
多分datetimeに降順をしていして何かをするんだと思うんですが
その先が調べられなかったんでよろしくおねがいします。
0492デフォルトの名無しさんNGNG
>>490
いや、それに応じた適切なデータ構造を考えたり、それをどう保存、読込みすれば
いいか判らないからというのが真実。
0493デフォルトの名無しさんNGNG
>491
ある日付〜ある日付-10日の条件で抽出すりゃ一発じゃん。
0494デフォルトの名無しさんNGNG
空のテーブルから、カラム名を取り出すには、どうしたらいいですか?
0495491NGNG
>493
レスどうもです。
質問をちょっと間違えました。
10日分でなく10件分のレコードがほしいんです。
休みがあるから-10日だと数件少ない状態でとれるのでこまってます。
0496初心子NGNG
質問です。

oracleでSQL文を発行してtableやviewの構成を取得することは
できるのでしょうか?
0497デフォルトの名無しさんNGNG
desc
0498初心子NGNG
select文で発行してレコードセットに取得したいのです
0499デフォルトの名無しさんNGNG
>>492
で、それに人件費掛けるくらいならDBのパッケージと
一山いくらのDB技術者を買ったほうが安上がり…と。
0500デフォルトの名無しさんNGNG
500!
0501デフォルトの名無しさんNGNG
>>498

v$columnsとかいう感じのディクショナリがあるんじゃね?
DICT表でも検索かけろや
0502デフォルトの名無しさんNGNG
>>495
データベースにもよるが
ORACLEなら select * from テーブル where rownum <= 10 order by 日付 desc
SQL鯖なら   select top 10 * from テーブル order by 日付 desc

こんな感じかな(未確認)
0503デフォルトの名無しさんNGNG
>>481
その年間売上データに対応するスキーマ作って、データパースして、INSERTする。
カレンダー用のテーブルを作ってJOINするとか、月を取り出す関数使うとかして、
GROUP BYでまとめて、SELECT集計関数使って終わり。

ていうかこんなこと聞くな。氏ね。
0504491NGNG
>502
ありがとうございます。できますた。
0505デフォルトの名無しさんNGNG
>>498
{ALL|USER|DBA}_TAB_COLUMNS
内容はリファレンスマニュアル嫁
0506デフォルトの名無しさんNGNG
table1
id
name

table2
id
date_from 期間はじめ
date_to 期間終わり

というテーブルで、

任意の日付がtable2の期間に引っかかる場合のtable1.name
を求めるにはどうしたらよいですか?
table1のidについてtable2で複数の期間が設定されています。
0507デフォルトの名無しさんNGNG
>>506
ふつうに考えれば

select table1.name
from table1, table2
where table1.id = table2.id
and table2.date_from >= 任意の日付
and table2.date_to <= 任意の日付
じゃないのか?

この定義だけ見ていると
テーブルを分けてる意味がワカランが
0508デフォルトの名無しさんNGNG
>>507
レスありがとうございます。

テーブルの構成はたとえば
table1
id    name
a     mona
b    giko

table2
id    from    to
a    2002-1-1 2002-1-3
a    2003-1-1 2003-2-2
b    2002-10-1 2002-11-1

のようになっています。
0509デフォルトの名無しさんNGNG
>>507
うまくできました。ありがとうございます。
0510507NGNG

ますます不思議

table1
id
name
date_from
date_to

で良いやん
難しく考えすぎやで
0511ししょんしゃ NGNG
数値の合計とか平均とか出したい場合、CGIで計算して表示するのとsqlで計算して表示するのどちらがいいのでしょ?
0512デフォルトの名無しさんNGNG
>>511
永続化する必要の無いデータなら、CGIで計算しよう。
0513デフォルトの名無しさんNGNG
>>511
SQLで1発で検索して、プログラムでは表示するだけにする方が
すっきり簡単

CGIって何の言語でしょ?Perlかな?
一度の表示件数にも、よってしまいますが
1レコードずつ計算させるのは非効率です

用はしたい事によるけれど
0514デフォルトの名無しさんNGNG
とっても遅いかもしれんが
>>510
そんなこと無いんじゃないかな
idがdate_fromとdate_toに従属しているから

table2は
date_from
date_to
id
として、date_fromとdate_toが主キーでしょうね
0515デフォルトの名無しさんNGNG
>502
ORACLEの方はこうじゃないとダメじゃなかった?

select * from
(select * from テーブル order by 日付 desc)
where rownum <= 10
0516デフォルトの名無しさんNGNG
>>514
そうだね。
>>510は「正規化」をもう一度勉強し直した方がいいかも。
0517ししょんしゃNGNG
>>512
>>513
レスどうもです。
永続化しないデータならCGIでの計算でおーけー。
ただ表示件数やらによってはsqlでやってしまったほうが効率的、ということですね。
臨機応変にと。
言語はPerlでございます。
0518デフォルトの名無しさんNGNG
>>517
>>512は嘘です。
表示件数には関係ないです。
合計とか平均ならどんな場合に置いてもSQLで計算した方がいいです。
0519デフォルトの名無しさんNGNG
俺気づいたんだけど、家でOracle入れても何の価値無いな。w
9だから勝手にDB立ち上がってメモり131MBも喰ってるし。。。。

table作ろうにも何のtable作ろうか小一時間迷った結果、MXで落としたエロゲリストしか思いつかなかった。
もちろんtableひとつでリレーションも糞もない。excelで十分まかなえる。w

お前ら家でOracleどう使ってる?
0520デフォルトの名無しさんNGNG
Oracleを使う事自体が目的なのか・・・
0521デフォルトの名無しさんNGNG
すいません。。。
参考書に
「データベースの作成にはMySQLが起動した状態で
コマンドプロンプトから次のようにします。」

cd c:\mysql\bin
mysqladmin create examdb

とあるのですが、CREATE DATEBASE failed; error:
とかで先に進めないんです。。誰かこんな糞厨に手をさしのべて頂けないでしょうか。。
0522DB歴2日NGNG
deleteコマンドで複数のレコードを削除できないでしょうか?

DELETE FROM tbl_name WHERE 3>0;

みたいな範囲指定じゃなく、0と3を削除 みたいな。

0523デフォルトの名無しさんNGNG
delete from tbl_name where col1 in (0, 3);
0524デフォルトの名無しさんNGNG
>>516
正規化ってアフォの一つ覚え?
0525デフォルトの名無しさんNGNG
>524
正規化以前に>516は>514に同調している時点であふぉ。
>510
>506の「table1のidについてtable2で複数の期間が設定されています。」を
読み逃しただけだよね。
でなければやっぱりあふぉ。
>514
基本的に日時を主キーにするな。
0526デフォルトの名無しさんNGNG
>>516
あんたがアフォ?
>>514が言っていることは、第3正規形の要件にある
「主キー以外の項目に従属する項目は分離する」にあたる。
第3正規形すらもできない香具師が多い限り>>516の様な
レスも見続けることになるだろう。
0527デフォルトの名無しさんNGNG
>>525
> 基本的に日時を主キーにするな。
なんで?
0528525NGNG
>>527
主キーとは識別子なり。
つまり主キーでもってデータを識別する。
日付で何を識別するの?
逆に「なるほど」と思えるような日時を主キーにしたモデルを見てみたい。
たまにはあるだろうけどね。(オレは思いつかん)
でも>>514の「date_fromとdate_toが主キー」は明らかに間違い。
理由はいっぱいある。
例えばidの値が違うデータ(table1の別々のデータ)に対して
date_fromとdate_toの組み合わせがまったく同じ
ということがありうる。これだけでシステムは止まる。
0529デフォルトの名無しさんNGNG
>>528
主キーが識別子だという主張は初めて聞いた(笑)
> つまり主キーでもってデータを識別する。
んなことに固執するから糞なDB設計が無くならないのだが
まぁ、それはいいとして

> 逆に「なるほど」と思えるような日時を主キーにしたモデルを見てみたい。
>>514がまさしくそうでしょ
「開始日」「終了日」の対象がIDだと言える。

> 例えばidの値が違うデータ(table1の別々のデータ)に対して
> date_fromとdate_toの組み合わせがまったく同じ
> ということがありうる。これだけでシステムは止まる。
そりゃシステム要件に依るでしょ。date_fromとdate_toでユニークに
なるべきならOKでしょ。
>>506 >>508 を読む限り、要件は限定出来ない。
ユニークにならないなら、全部をキーにするかもしくはキー無しにすればよい。
つか、自分で墓穴掘ってるの気づかないかなぁ。

> 理由はいっぱいある。
一つだし。
ほかにわ?(笑)
0530510NGNG
言いたいことは、上でほとんど言って貰ってるわ

あとで考えたら、この程度の項目数のDBってないよな(w
もっと多くの項目があり、抜粋したもだったらって納得したよ

自分が言いたかったのは
正規化って言う意味ではなく
テーブルを読むっていうか...アプローチって言うか
考え方ね!

>507の範囲指定が無ければ(JOINしただけなら)
>510の形式になるじゃん
0531デフォルトの名無しさんNGNG
>529
少なくともAccessでは主キー=一意制約=識別子だよ。
0532デフォルトの名無しさんNGNG
>>531
主キーが識別子じゃないとは言ってないよ。
1.日時を主キーにするな
2.なんで?
3.主キーとは識別子なり。
4.そんな主張は初めて聞いた(笑)
という事です。
0533デフォルトの名無しさんNGNG
うーん、日付を主キーにしたほうが良い要件もあるかもしれん・・・
とは思うけど、少なくとも>>525の方が妥当では??

>>507の事例も、他に記述されてない要件があるかもしれないってひねくれる
事は出来るけど、普通に見たらに見たら主キーに設定するのはidが妥当で、
日付を主キーってのはちょっとおかしいし。

っつか日付を主キーはやっぱ変だよ、date型が主キーだと苦労しそうだし。
かといってchar型に日付のデータ入れた形だと今度は日付データの扱いが
面倒そうだし。
0534デフォルトの名無しさんNGNG
履歴管理は日付じゃないと困ると思うが
0535デフォルトの名無しさんNGNG
>「なるほど」と思えるような日時を主キーにしたモデルを見てみたい。
円相場やTOPIXのように
日時に対する数値を記録するテーブル。
0536506NGNG
当初の質問自体はもう解決したのでこのスレは見ていませんでしたが、
議論がすすんでいますね。

>>506のケースは、もう少し詳しく書くと

<table1>
table1のid NOT NULL UNIQUE
name
addressなどなど...


<table2>
table2のid (key) NOT NULL UNIQUE
table1のid NOT NULL
date_from 期間はじめ
date_to 期間終わり

というテーブルです。例示の際にちょっと省きすぎたかもしれません。

少なくともこの場合は日付を主キーにはできないっすね。違う人が同じ期間
という場合もありますから。

ケースによっては日付をキーにします。その場合はdate型が主キーでも苦労しないです。
0537デフォルトの名無しさんNGNG
>>533
>っつか日付を主キーはやっぱ変だよ、date型が主キーだと苦労しそうだし。
変じゃない。「苦労しそうだし」って思いこみ。
例えばどんな苦労するの?
別に苦労なんてない、文字型も日付型も扱いは全く一緒。
そんな思いこみや根拠のない迷信がDB設計のじゃまになる
0538デフォルトの名無しさんNGNG
最近MySQLの勉強を始めたのですが、そのままでは日本語検索が出来ないという話を聞きました。なんとか対応させる方法はないのでしょうか?
よろしくお願いします。
0539デフォルトの名無しさんNGNG
>>538
「話を聞いた」だけ?
「そのままでは日本語が使えない」ことを確認してみた?
0540525NGNG
>>535
なるほど。

オレが言いたいのは*何*でもってデータを識別するかということ。
>>537
頼むから生年月日で社員を識別すんなよ。(ちと煽り)

基本的に値が変わるかもしれないものを主キーにしてはいけない。
データの日付が変わったとき、普通はUPDATEをかける。
しかし日付が主キーならDELETE→INSERTをかける必要がある。
このデータに従属するテーブルがある場合、それらのデータも
DELETE→INSERTを行う必要がある。

>>533
日付でデータを識別しなければいけないときは日付が主キーになりうる。
(完全否定しているわけじゃないよ。)
date型かchar型というのは関係ない。
「苦労しそう」とか「面倒そう」というのも関係ない。
せっかくフォローしてくれたのにごめんな。
0541525NGNG
>>536
なるほど。
要件によっては<table2>の主キーが複合キーになったり
<table1>と<table2>の間に関係テーブルが必要だったり
するかもしれませんが、一応納得です。
(この辺は536さんのみぞ知るですから)

>例示の際にちょっと省きすぎたかもしれません。

省いていなかったら>>507で全て終わってましたね。(わら
0542デフォルトの名無しさんNGNG
しったか厨房大暴れ(w
0543デフォルトの名無しさんNGNG
みなさん正規化が大好きなんですね。
0544デフォルトの名無しさんNGNG
正規化するのが 当然なだけ。
つーか常識だろ(w
0545506NGNG
わざと正規化しないこともあるけどね。
第3正規化までして、また戻るとか。
05461日目NGNG
>>545
例えばどんなときですか?
0547デフォルトの名無しさんNGNG
どうせパフォーマンス向上とかの理由だろ
俺からすれば、ハードウェアに金かけろって感じだが
0548デフォルトの名無しさんNGNG
>546
正規形としては正しいが、顧客の要件を満たせないとき。
0549デフォルトの名無しさんNGNG
>>547
ハードにかけても限界があるよ!
DB定義とSQL文の書き方で
数倍のパフォーマンスが変わる
件数が増えれば、顕著にあらわれる

まぁ一度、膨大な件数のデータを扱ってみたら
正規化だけが正しいと思えなくなるから
0550 NGNG
なぜ構文エラーになるのかわかりません。どこがよくないのでようか
SELECT name1, adress1 FORM Table1
0551仕様書無しさんNGNG
>>550ネタだよな?
一応・・・
○FROM
×FORM
0552 NGNG
>551
こいつも原因だよきっと?
一応・・・
○ address1
× adress1
0553506NGNG
そうですね。
先輩には、パフォーマンスよりも論理的整合性。メンテナンスのしやすさが大切だ
と教わっています。

それにまあ、超高負荷な案件なんて、受注したことないですから。

上の方で「正規化しない」と書いたのは、ちょっといきがってみただけです。
0554U ◆CZtFsGiu0c NGNG
>>192
LFはセル内の改行コードだから当然そうなる。コードの詳細がわからないけど、

cells(1,1).Value = "aaa"
cells(2,1).Value = "bbb"

となるようにコーディングできない? でなきゃ、

S = "aaa" & vbCr & vbLF & "bbb"

でやってみたら?(試してないけど)
0555U ◆CZtFsGiu0c NGNG
すいません、誤爆しました。
0556デフォルトの名無しさんNGNG

SQL Server7.0/2000 です。
クロス集計について。

Name  Day     NUM 
------ --------- -----
A    1001    2
A    1009    1
A    1001    1
B    1001    4
A    1001    12
B    1003    6
C    1005    22
B    1003    16

このようなデータがあり、(続く)
0557デフォルトの名無しさんNGNG
(続き)、クロス集計を
select Name,
 sum(case WHEN Day=1001 then NUM END) as Day1001,
 sum(case WHEN Day=1002 then NUM END) as Day1002,
 ・・・
 sum(case WHEN Day=1009 then NUM END) as Day1009
from table1
group by Name
order by Name
のようにしています。
実は、Name が数百種類、Day も重複なしで100日分位になるのですが、
その場合やはり、
 sum(case WHEN Day=1001 then NUM END) as Day1001,
の行を100個書くしかないのでしょうか。

あるいは、他にクロス集計の方法はありますか?
0558 NGNG
効率の悪いクロス集計を組むより、一時テーブルを使ったほうが
ずっと早いと思うが・・ 悩む時間も無駄だと思うが・・・ 
0559557NGNG
>>558
例えば一時テーブルはどういう作り方にしたらよいですか?

ちなみに結果として欲しいのは集計の1部とかではなく、
クロス集計の表(CSV)なんです。
0560デフォルトの名無しさんNGNG
クロス集計って何?
0561デフォルトの名無しさんNGNG
俺だったらSQLでやらないなー
0562デフォルトの名無しさんNGNG
>>559
一時テーブルは、create table ##table1

横展開するには100個かくしない無いと思われ
って言うか、一時テーブル作成してもね
0563557NGNG
>>562
あ、やはり100個書きますか、そうですよね。
ありがとうございます。
0564デフォルトの名無しさんNGNG
create procedure GetNowDate
returns(NowDate date)
as
begin
SELECT MAX(CURRENT_TIMESTAMP)
FROM Table
Into :NowDate;
suspend;
end

InterBaseで現在の時間を返すストアドなんだけど
ERROR: DATE data type is now called TIMESTAMP
みたいなErrorが・・・
なぜ?
0565デフォルトの名無しさんNGNG
非常に初歩的な質問なのですが、複数条件検索の記述はどうすればいいのですか?
0566デフォルトの名無しさんNGNG
>>565
マルチ死ね。
0567デフォルトの名無しさんNGNG
>>564
InterBaseは知らないので間違ってるかもしれないっすけど
Intoの記述する場所違うくねぇ?


>>565
基礎編の本を読みましょう
たぶん知らないことが、たくさん書いてありますよ
0568だいすけ ◆P0//Gikoow NGNG
SQLをはじめてまなぶとしたら、どのSQLをまなぶのが一番でしょうか?
なお、当方びんぼーなため、Oracleとかの有料なのは、買えません。。。
0569デフォルトの名無しさんNGNG
すいません、質問です。
SQL Server 2000 において
データ変換サービスを使ってDBの内容をcsvファイルに書き出すことができますが
その際、スケジュール設定で実行のタイミングを時間で設定することはできるのですが、
DBが変更、追加されたタイミングでcsvファイルに書き出すように設定できないでしょうか?
0570569NGNG
解決しました。
お騒がせさまでした。
0571デフォルトの名無しさんNGNG
>>568
どのSQLが...って事なら、
それぞれ方言みたいのがあるものの
どれが一番良いってのないっす

覚えて仕事にするって観点から考えると

ORACLEは、いろいろなOSや開発言語で
使えるため、一番柔軟だと思うっす

SQL鯖&MSDEは、やはりWinとVisual製品に
なってしまいがちです
悪くはないが...以下自粛

PostgreSQLやMySQLは、
フリー=安い=開発費削減=短期間
って事で、以外と厳しいかも
なにか覚えてからの方が良いと思うっす
0572デフォルトの名無しさんNGNG
>>568
Oracleも試用目的とかなら、無料で使えるよ。

http://otn.oracle.co.jp/
0573568=だいすけ ◆P0//Gikoow NGNG
まるほど、ありがとうございます。
皆さんの意見をさんこうに、ひとおおり、
Oracle体験版も含めて、かいつまんでみたいと思います、
0574大失敗NGNG
WindowsNt上でSQL Server7.0を利用しているのですが、
誤ってローカルのアドミニストレーターの権限を全て
外していまい、DBに対して何もできなくなってしまいました。

こういった場合、どのようにすればアドミニストレータに権限を復活
できるのでしょうか?
既に作成済みであったユーザには特殊な権限は付加してなかったので
ログインユーザを変えてもダメでした。

リモート操作するソフトがあるようなのですが、
そのソフトでSAというアカウントでログインし、アドミンを復活するという
手もあるようですが、どのソフトを使えばよいのかわかりません。

また、その他に簡単にアドミンに権限を復活させる方法がありましたら、
ご教授お願いします。



0575デフォルトの名無しさんNGNG
やったー
java上でJDBC接続してACCESSのデータをオラクルのPL/SQL
みたいに表示できるクラス作ったぜ!
ACCESSなのにdescも可能。
でも見せてやらない。
0576デフォルトの名無しさんNGNG
>>575
descか、昔やりたかったんだけど、なんかできなかったような。。
JDBC2.0でスキーマ定義を取り出すのってどうやってやるの?
0577デフォルトの名無しさんNGNG
レコードがあるかどうかは
rs.EOFがtrueかfalseかでわかるんですけど、
ある名前のテーブルがあるかどうかを確かめる命令はあるでしょうか?
VBでもなんでもいいですのでお願いします。
0578デフォルトの名無しさんNGNG
>577
っつーかDBは何だよw
0579デフォルトの名無しさんNGNG
>577
しすてむてーぶるからせれくとしる
0580577NGNG
Access+VB6です。
システムテーブルについてはよく知りません。
0581577NGNG
Exist("TABLENAME")
というような関数があると仮定して、
その名前のテーブルが存在すればTrueが帰ってくるとたすかります。
0582577NGNG
select * from TABLENAME
を実行してエラーが返ってきたらそういう名前のテーブルは無いと判断する
という裏技も考えました。
0583577NGNG
システムテーブルを使う方法は想像もつきません。
0584デフォルトの名無しさんNGNG
DAOならTabledefsをブン回せ。
つーかこんなFAQ、探せば幾らでも出てくるだろうに。
0585デフォルトの名無しさんNGNG
>>575
そりゃ、すごいクラスを
作ったな!!

>>576
DatabaseMetaData
インターフェースを使うだけだ。
アフォでもできる。
0586577NGNG
なるほろ
0587577NGNG
別の質問ですけど、
ADOを使ったアプリケーションをユーザに配布すると、
ユーザがわざわざコントロールパネルのODBCの設定をしなければなりません。
このODBCの設定を自動でおこなうプログラムの作成は可能でしょうか?
0588デフォルトの名無しさんNGNG
>587
可能だが、その前に「接続文字列」を調べれ。
つぅか、君の会社ではいつもそんな糞な配布の仕方してるのか?


0589577NGNG
相手の会社にわざわざいってサーバをいじるということをやってます。
接続文字列しらべてみます。
0590デフォルトの名無しさんNGNG
>>577
せっかくだから、OLE DB プロバイダというのも検索してみな。
ADO 使うんだったら ODBC はポイしなさい。
0591577NGNG
精進します。
0592デフォルトの名無しさんNGNG
DBはポスグレでの質問です。

TABLE_AのFIELD1
---------------
(・∀・)
(・∀・)ホー
(・∀・)カエレ

TABLE_BのFIELD2
---------------
AAA(・∀・)AAA
AAA(・∀・)AAA
AAA(・∀・)AAA
AAA(・∀・)ホーAAA
AAA(・∀・)カエレAAA

これで結果が
------------------------
(・∀・) 3レコード
(・∀・)ホー 1レコード
(・∀・)カエレ 1レコード
って結果を得るには、どうSQLを書けば良いのでしょうか。
0593デフォルトの名無しさんNGNG
Aを取り除いて、GROUP BYして、COUNTしろ
0594デフォルトの名無しさんNGNG
ORACLEなんですけど、
テーブル作成するときに 重複ありのキー設定をしたいんだけど
クリエイト文の後ろに
PRIMARY KEY(項目A)
をつけたせばいいだけなんでしょうか?
0595やっぱり最高NGNG
467 名前:コスモス 投稿日:02/11/20 11:46
理由その2:
SQLが嫌いです。(というかSQLの存在意義って?)

SQLというのはRDBを扱うための専用言語のようなものですよね。
さらに埋め込みSQLというものまであります。
埋め込みSQLはCやVBなどのプログラム中にSQL文を直接書けて、しかも変数
にselectの結果を代入したりできるという、話だけ聞くと非常に便利そうな機能に
見えます。
機能というよりメタ言語ですね。(笑)

その埋め込みSQLですが、はっきり言って設計した人の神経を見たいです。
そもそもSQL自体まるでナンセンスな言語だと思っていましたが、埋め込みSQL
はさらに輪をかけて。。。
ちょっと凝ったことをしようと思うとすぐ壁にぶち当たります。

誰が考えたか知りませんが、「お願いです。今後2度とプログラミング言語を設計
しないでください。世のため人のために。」(大笑)
0596デフォルトの名無しさんNGNG
>>595
面白いのみつけてきたね。

SQLみたいなリレーションのシステムがないとDBからデータ選ぶ時
大変だと思うんだがなぁ・・・・・・・・・・・
一枚一枚独立した表じゃ、昔の紙ベースでファイリングしたデータと全くかわらん。
埋め込みだって値が変わったら自動にSQL文発行してくれて便利だと思うんだけどなぁ
他人事だからどうでもいいけど。
0597デフォルトの名無しさんNGNG
>>595
なんだかんだ言って世の中こういう人の方がおおいからな。
未だに年間の顧客データとかを紙に書いて棚いっぱいに入れてあるところがたくさんだ。
世の中そんなもんだ。
0598デフォルトの名無しさんNGNG
直接SQL書かなきゃいいだけの話なのになぁ。
0599デフォルトの名無しさんNGNG
神経なんか顕微鏡を使って見ても、みんな同じだよ(w
0600デフォルトの名無しさんNGNG
>>595
コピペにマジレスするのもなんだが、自分が理解できない、使いこなせない
ものを否定する香具師って、貧しい心の持ち主だね。
(ある意味、日本人的か)

# むかし、ピカソをダメ呼ばわりしたバカ教師がいたとか・・・。
0601デフォルトの名無しさんNGNG
>>600
でもそんなバカ教師でも、ピカソが分からないのに
分かったふりしてるヤシよりは正直な分だけマシという罠。
0602デフォルトの名無しさんNGNG
>595のコピペって、「何と比べて」SQLがダメって言ってるんでしょうか?
私の場合、スタート時点からデータベース≒SQLっていう状況なのでよくわかんないのですが。
0603ワラタヨNGNG
http://pc.2ch.net/test/read.cgi/bsoft/966240993/より

472 名前:コスモス 投稿日:02/11/20 12:01
まとめ:
Oracle以外データベース製品はたくさんあります。
にもかかわらずなぜみんなOracleなのか?
Informix、DB2などなど。あ、SQL Serverは論外ですよ。(笑)
なぜこれらの製品はそんなにシェアがないのか?

最近思うのは、もしかしたらこれらの製品はOracleよりももっとひどいのかも
しれないと。。。(涙)

データベース業界ではOracleが一番使いやすく性能も出る製品なのだと思い
ます。
データベース業界はまだまだ未成熟な業界だと思います。
これを読んで、「そんなことないよ。Oracleっていいデータベースだよ」と思った
あなたは、Oracleに洗脳されているだけではないでしょうか。
0604デフォルトの名無しさんNGNG
ピカソだって素描画を見れば、すごさは素直に理解できるはず。
0605デフォルトの名無しさんNGNG
いちいち特殊文字をエスケープさせるとこ以外はSQLはべんりだっちゅーに
0606デフォルトの名無しさんNGNG
>>603
凄い世界の住人ですね。
こういう人はストアドを書くどころかDOSコマンドすらもいじれないでしょうな。
0607デフォルトの名無しさんデフォルトの名無しさんNGNG
下記のようなテーブルがあったとします。
テーブル1
ID|機種名
1 2ch
2 ふたば

テーブル2
ID|枝番|台数|種類ID
1 1 10 2
1 2 20 3
2 1 10 2
2 2 30 4
2 3 40 1

このとき、
ID|機種名|台数1|種類ID1|台数2|種類ID2|台数3|種類ID3
1 2ch  10  2    20  3    0   0
2 ふたば 10  2   30  4    40  1

というようにテーブルを結合してデータを一度で取り出せるSQL文はどう書けばいいのでしょうか?
0608607NGNG
書き忘れましたが、DBはOracle 8.1.6i OSはWindowsです。
0609デフォルトの名無しさんNGNG
>>607
SELECT
 T1.ID,
 T1.機種名,
 T2-1.台数 AS 台数1,
 T2-1.機種ID AS 機種ID1,
 T2-2.台数 AS 台数2,
 T2-2.機種ID AS 機種ID2,
 T2-3.台数 AS 台数3,
 T2-3.機種ID AS 機種ID3
FROM
 テーブル1 AS T1,
 (SELECT ID,台数,種類ID テーブル2 WHERE 枝番 = 1) AS T2-1,
 (SELECT ID,台数,種類ID テーブル2 WHERE 枝番 = 2) AS T2-2,
 (SELECT ID,台数,種類ID テーブル2 WHERE 枝番 = 3) AS T2-3
WHERE
 T1.ID = T2-1.ID (+)
 AND T1.ID = T2-2.ID (+)
 AND T1.ID = T2-3.ID (+)

for ORACLE 未検証
たぶん行くと思うけど。
ちなみに環境ぐらい書こうね
0610607NGNG
>>609
神!ありがとうございました!!明日会社で試してみます。
ところで、初歩的なことかもしれませんが(+)はどういう意味でしょうか?

0611デフォルトの名無しさんNGNG
>>610
臍です。
0612607NGNG
へそって、繋がりがあるってことですか?
「(+) SQL」や「SQL へそ」でググッても情報が見つからない。。。
0613デフォルトの名無しさんNGNG
SQLとはちょっと違うと思いますが質問させてください。
VB+oo4oでDBアプリを開発していますが、SQL文を発行する関数では、
読み込みでも書き込みでも必ず下記の処理を行っています。

書き込みはともかく、読み込みでトランザクションの開始・終了、
コミットは意味ないですよね?

トランザクション開始
OraDynasetの作成
  〜処理
 Close Dynaset
 Commit
トランザクション終了
0614デフォルトの名無しさんNGNG
>>612
ハゲシクワラタ

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_kj04_1.htm
この辺見てみ
0615607NGNG
>>614
ありました!へそ。勉強してきます。Thx!
0616デフォルトの名無しさんNGNG
内容と全然関係ないけど、>>607 を読むと、等幅フォントでPREタグ付きなら読みやすいのに、と思う。
(2ちゃんねるは、投稿文書にタグが使えないのがちょっと不便)
0617デフォルトの名無しさんNGNG
テーブルにインデックスが存在するのかどうかを知るにはどうするのでしょうか?
0618デフォルトの名無しさんNGNG
>>617
仕様書(テーブル設計書)を見れ
0619デフォルトの名無しさんNGNG
>>611
へ?そ うなんだ?! (チト苦しい)

>>614
外部結合と臍と何の関係が・・・?
(とトボケてみるテスト)
0620デフォルトの名無しさんNGNG
>617
しすてむてーぶるからせれくとしる
0621デフォルトの名無しさんNGNG
現状SQL:SELECT ID FROM TABLE_A WHERE ID IN (SELECT ID FROM TABLE_B WHER NAME = 'HOGE') OR ID = '99999999';

このSQLを最大速度で結果を取得できるよう変更したいのですが、どのようにすればよいでしょうか?
環境はSQLSERVERです。
0622デフォルトの名無しさんNGNG
から揚げ
0623デフォルトの名無しさんNGNG
>>621
普通に考えたら別の方法も、これしか無いべ
SELECT a.ID FROM TABLE_A a, TABLE_B b
WHERE (a.ID = b.ID AND b.NAME = 'HOGE')
OR a.ID = ''99999999'

当然インデックスは張ってるよだろうし
実行計画(測定プラン)をして見るとよろし
0624デフォルトの名無しさんNGNG
>>623
ありがとうございます。それもやってみます。
現在の最高速は
SELECT ID FROM TABLE_A WHERE ID IN (SELECT '99999999' UNION SELECT ID FROM TABLE_B WHER NAME = 'HOGE');
です。
しかし、データの件数などによって変わるものなんですね。
0625デフォルトの名無しさんNGNG
>>624
このパターンは、INの中の件数が増えれば増えるほど
遅くなると思うなぁ?

JOINする方が、キャッシュが効けば早くなりそうな?
(あくまでも予想)
0626デフォルトの名無しさんNGNG
>>625
一応INの中の件数は1,2件の予定です。
0627デフォルトの名無しさんNGNG
PL/SQLの初心者なんですがよい参考書を
教えていただけないでしょうか?
お願いします
0628デフォルトの名無しさんNGNG
なんか香具師が多いな・・・
0629デフォルトの名無しさんNGNG
>>627
本屋に逝きなさい。
0630デフォルトの名無しさんNGNG
全テーブルの全カラムを対象に文字列を検索したいんですが
どんなSQLになりますか?

0631デフォルトの名無しさんNGNG
http://www.ann.hi-ho.ne.jp/hirok/sql/

http://www.sqlpowerpage.co.jp/

リンク貼ってやるから探せ!
0632デフォルトの名無しさんNGNG
>>630のように、実行環境も使用DBMS製品名も書かず、質問内容も具体的でないのに
的確なコメントが付くと思ってるDQNの脳細胞はどんな構造なのか調べたいのですが、
どんなSQLになりますか?

環境は下記の通りです。

CPU : Panchium 20 60GHz
OS : Windos Z SP-12
メモリ : 32GB
DBMS : Micr○s○ft DQN Server 2002 SP10
0633デフォルトの名無しさんNGNG
>>632

DROP DQN;
Commit;
-- DQNは逝ってよし。(-_-;
0634デフォルトの名無しさんNGNG
SELECT文はなんでカラム(SELECT)から書くのか?
テーブル(FROM)から書くのが論理的で、
認識しやすいと思うのだが...
0635デフォルトの名無しさんNGNG
>>628は久しぶりに書いただけだよな。
0636デフォルトの名無しさんNGNG
>>634

> SELECT文はなんでカラム(SELECT)から書くのか?
> テーブル(FROM)から書くのが論理的で、
> 認識しやすいと思うのだが...

先頭の字句だけで「選択」、「更新」、「追加」、「削除」の種別が
判別できるので、人間にも構文解析機にも優しい作りだと思うが。
0637デフォルトの名無しさんNGNG
確かに日本人からみたら、テーブルから書いた方が
分かりやすいかもしれん。
頭では、どのテーブルのどのカラムかって考えるよなぁ。
コードを見るときFROMのテーブルから見るときもある。
英語が元だから
テーブルにあるリンゴじゃなく
apples on the table
といっしょだろ。
まぁ、そういうものの見方はずっと
持ち続けてくれ。

>>636はあまり理由になってないな。
0638デフォルトの名無しさんNGNG
>>637
>確かに日本人からみたら

また私は外国人ですと言いたげな妙な日本人が現れた。

0639デフォルトの名無しさんNGNG
プロメトリックMCPバウチャー安いの見つけた!!
なんと、5000円!!
アクセスしてみて!
http://www.bidders.co.jp/item/12162690
0640デフォルトの名無しさんNGNG
>>638

> また私は外国人ですと言いたげな妙な日本人が現れた。

>>637は宇宙人だと思うが?
0641デフォルトの名無しさんNGNG
おぃおぃ、>>638
>>637の文面からどこから
そんな解釈ができるんだ?
>確かに日本人からみたらって
確かに(オレ等)日本人からみたら
ってことだろ。
きちんとよぬ!

あとそういうものの見方とはっていうのは
常に些細なことでも疑問を持ちながら
いけということだ。
この業界は知ったかが多すぎるからな。
0642デフォルトの名無しさんNGNG
>>641
宇宙人ハケーン
0643デフォルトの名無しさんNGNG
あー漏れも、そう思ったことある。
特にエイリアス切った時なんか、
FROM句から書くこともある。

やっぱ日本人だからかなぁ。
0644634NGNG
即レスども!
そうだよな、漏れ以外にそう思っている
香具師がいて良かったよ。
>>643 禿胴!!
638=640=642
だろ。ちゃちいれられた
だけで、ワンパタ-ソな返し、
見苦しいな。
0645デフォルトの名無しさんNGNG
>>1よ、スピニングキュートレズがどうかしたか?
0646デフォルトの名無しさんNGNG
>>637

確かに日本人からみたら、テーブルから書いた方が(私は日本人を超越したプログラマだからそうでもないがまぁお前らパンピーには)分かりやすいかもしれん。
0647デフォルトの名無しさんNGNG
それが4GLってもんだよ。
0648デフォルトの名無しさんNGNG
この件に関しては日本人も外国人も関係ないだろ・・・
0649デフォルトの名無しさんNGNG
日本人じゃなくても、テーブルから
書いた方が分かりやすいんじゃないか?
>>643の言うとおり、テーブルのエイリアス
が先にきて、後で宣言するなんて読みにくいし
書きにくい。
ベタだがSELECT FROMじゃなく
SELECT TABLE *** COLUMNS ***
の方が直感的な気がする。
こればっかりは、しょうがないし
ここでほざいていても仕方がないことだが。
0650デフォルトの名無しさんNGNG
SQLは単一のテーブルからselectするだけじゃないから>>649はちょっと無理がありそうな
気分的には今のままでいいんだが、特に根拠はないな
0651デフォルトの名無しさんNGNG
>>650
いや、現在の構文をひっくり返しただけ。
SELECT
 TABLES  emp e,sales s
 COLUMNS s.code ,e.name
WHERE s.id = e.id
SQL92の書き方でもTABLESにいれればいい。
0652デフォルトの名無しさんNGNG
>>1-650

データ操作言語を記述することなく、脳内の思考通りに動作する、"デムパ Driven Database"が
実現できたら便利だと思うんだが、どうよ。
0653デフォルトの名無しさんNGNG
FROM句以降が共通でコピるって観点からは
現状の構文は扱いやすいのだが?
0654デフォルトの名無しさんNGNG
以下のテーブルがあるとします。

ID|項目1|項目2|項目3
001 0  0  0
001 1  0  0
002 0 0 0
002 0   0  0
003 0   0  1

oracle8iにて以下の条件で抽出するにはどのようなSQLでしょうか?
・項目がすべて0のIDを抽出する。
・ID=001は、項目1が'1'のレコードもあるので抽出しない。
・ID=002は、1レコードだけ(重複せずに)抽出する。


以上、なにかしらヒントでもいいんでよろしくお願いします。。
0655デフォルトの名無しさんNGNG
>>654
・項目がすべて0のIDを抽出する。
・ID=001は、項目1が'1'のレコードもあるので抽出しない。
create view 〜 where (item1 = 0) and (item2 = 0) and (item3 = 0) and (NOT ID = '001')

・ID=002は、1レコードだけ(重複せずに)抽出する。
view に対して DISTINCT
0656デフォルトの名無しさんNGNG
“そもそもが糞な SQL に対する不満”は置いとこうや。
0657デフォルトの名無しさんNGNG
SELECT ID FROM テーブル
WHERE MAX(項目1)=0 AND <中略>
GROUP BY ID
0658デフォルトの名無しさんNGNG
>>1-657
SQLを満足に使いこなせないヴァカどもが傷を舐め合うスレはここですか?
0659デフォルトの名無しさんNGNG
>>658
まぁ、全然理解出来なかった君よりは幾分ましだと思うぞ。
0660デフォルトの名無しさんNGNG
>>659
ウワーン、煽りに煽りで返された (泣)

逆ギレしてもいいでちゅか?
0661デフォルトの名無しさんNGNG
>>654-660
つまり、「DISTINCT 使うのはクソ」ということでよろしいか?
0662逆ギレの658NGNG

>>661

> つまり、「DISTINCT 使うのはクソ」ということでよろしいか?

んなこたぁ、誰も言ってねえぞ、ゴルァ!
0663デフォルトの名無しさんNGNG
盛り上がってるところに厨Qすみません。

>>657のようにhavingでなくwhere句で書くのは普通のことなんでしょうか?
0664デフォルトの名無しさんNGNG
ちょっと遅いが...
>642の続きだったから
>643の「エイリアス」を「エイリアン」と
読んでしまった俺を許してくれ。
0665デフォルトの名無しさんNGNG
>663
集計前のデータに対する条件付けはWHERE句
集計後のデータに対する条件付けはHAVING句
だから>657はHAVING句が正解
0666663NGNG
>>665
ご教示ありがとうございます。
スレが止まってドキドキしました。
0667デフォルトの名無しさんNGNG

TABLE<権限>
ユーザーID
機能名
権限レベル

TABLE<ユーザー>
ユーザーID
グループID

TABLE<権限グループ>
グループID
機能名
権限レベル

こういう3つのテーブルがあって、
<権限グループ>が更新されたら、<権限>も更新するというトリガーを作りたいんだが、
おまいら誰か教えてください。削除と挿入はできたんだが...
0668デフォルトの名無しさんNGNG
UPDATEすりゃいいじゃん
0669デフォルトの名無しさんNGNG
>25
一番お気楽に使い始めることが出来るのはVBAじゃないかと思う。
0670デフォルトの名無しさんNGNG
誤爆スマソ
0671デフォルトの名無しさんNGNG
SQL鯖にはオラクルのSQL*Plusみたいなコンソールは無いのでしょうか?
作ったSQLを試しに流してみたいときなんかに使いたいのですが・・・。
ちなみにSQL鯖は6.5でつ。(藁
0672デフォルトの名無しさんNGNG
>>671
クエリーアナライザ
0673デフォルトの名無しさんNGNG
一定時間で別PCのDBへバックアップ取りたいのだが…

どうすればいいんだ

使用環境
(PC2台に同じテーブル構成の)MySQLとperl

perlの方は、kore.plです(爆死
0674デフォルトの名無しさんNGNG
>>672
それってSQL鯖のCD-ROMに入っているですよね?
開発環境がWin2000WSなんですが、問題なくインスコできるでしょうか?
0675デフォルトの名無しさんNGNG
>674
クライアントツールって位だから、できまふ。
0676671NGNG
>>675
さっき、6.5のCD-ROM取ってきて入れようとしたんですが、Win2KじゃSetup実行できないよ〜んって
言われますた。(ショボーン
6.5の場合、SQLのコンソールはISQL/Wですよね?
しかたないので、VS6DevのCD-ROMを見てるですが、同じようなのは見つけられませんですた。
VS6Dev付属のBackOffice2000のCDもセトウプ起動したらいきなり全部インスコしようとしてくるし・・・。
必要なのはSQLのコンソールとエンタープライズマネージャーぐらいなんだが・・・。

クライアントツールはどこにはいっとんじゃ?
CDがいっぱいありすぎてさっぱり判らんぞ。ゴルァ>MS
0677デフォルトの名無しさんNGNG
ほんのりとスレ違いっぽいのですが、たすけてください。

DOSから「SQLPLUS SCOTT/TIGER@TNSN @FILE=D:\TEST.SQL」
とやると、コネクトしてファイルからSQLを実行しますが、
「SQLを実行して終了」という起動オプションみたいなものはありますか?

一応、実行されるファイルに「EXIT」コマンドを入れておくと
ファイルを実行後に終了するのですが、
実行したSQLが正常に終わったかどうかが判定できません。

そもそもSQLPLUS.EXE自体の復帰値?は「0」しかないのですかね。
0678デフォルトの名無しさんNGNG
また400ですか?
0679デフォルトの名無しさんNGNG
>>671
Microsoft Query は?Office2000が入っていれば入ってると思う。
Office直下の MSQRY32.EXE

win2k+SQLサーバでやったことは無いけど、
win2k+Symfoでも動いたからダイジョブそうな気がする。
ただ、難解なSQLとかはダメだったりした記憶が。
0680デフォルトの名無しさんNGNG
>>679
レスありがと。

> Office直下の MSQRY32.EXE
たしかにこれ動くんだけど、これってAccessのコンポーネントで動いてない?
変なクエリウィンドウや接続にDSN聞いてくる辺り、もろそれっぽいんですが・・・。
できればISQLみたいにSQL鯖とネイティブ(と言えばいいのかな?)な接続をする方がいいんですけど。

0681671NGNG
あったあった。
BackOffの2枚目CDにSQL鯖があって、その中のセトウp起動したら見覚えのある
ダイアログが出たYO。
あ〜、コンソールの用意だけで半日潰しちまった。(鬱
0682デフォルトの名無しさんNGNG
>>671
osqlとかisqlとかがSQL鯖のフォルダにあるよ
コマンドラインから使う
0683デフォルトの名無しさんNGNG
初歩的な質問かとは思いますが教えてください。

テーブルA,テーブルBがあり、
BはAのバックアップとして存在します。
AをupdateするたびにBへ同じ内容をinsertしています。
BはAのカラム+insertされた日付もキーに持っています。

BのデータをAに戻すSQLを教えていただけないでしょうか。
一度にではなく、1件指定で戻したいのです。

よろしくお願いします。
0684デフォルトの名無しさんNGNG
BのデータでAのデータをUPDATEすりゃええだけやん・・・
0685デフォルトの名無しさんNGNG
(´-`).。oO(戻す方法も分からないのに良くバックアップなんて言えるよな・・・)
0686デフォルトの名無しさんNGNG
>>683
結合キーでJOINして
指定したい1件を条件式に入れて

ほか全ての項目をセットすりゃいいだけじゃん!

あと質問するときはデータベースの書けちゅーに
方言があって違うときがあるから
0687デフォルトの名無しさんNGNG
>683
insert into A select 列名 from b where 入れたい条件
でいいんじゃないの
0688デフォルトの名無しさんNGNG
>>687
duplicate records on key error...
0689687NGNG
>>688
普通ばくあぷから戻すときってデータは空じゃないの?
キーがかぶるならexistでかぶるもの省けばいいだろ
0690デフォルトの名無しさんNGNG
Now I can't type Japanese charactor.
I don't know >>683's environmet.
But READ this thoroughly.
>>683 wants rollback by 1 record.
TABLE A is not empty.

I can't understand your saying...
'He shuold escape duplicate error by exist word.'
It's no meant with this way.

As writing >>686
if using MSSQL
upate A
set A.col1 = b.col1,
....
from A,B
where A.KEY=B.KEY AND
B.KEY= 'VALUE' AND
B.UPDATE_DATE = 'YYYY/MM/DD'

If using Oracle,Oracle can't use FROM in UPDATE.
So you only have way of deviding this SQL to
SELECT ... INTO ... FROM B
WHERE B.KEY= 'VALUE' AND
B.UPDATE_DATE = 'YYYY/MM/DD'
and
UPDATE A ... .
...same above WHERE words.
in a program code.
0691デフォルトの名無しさんNGNG
>>690
tyu-ka, ro-maji de uteba iinnja?
0692デフォルトの名無しさんNGNG
>>691
ninnja ha nannninnja?
0693デフォルトの名無しさんNGNG
class | test | name
---------------
A | 30 | mona
A | 40 | sii
B | 50 | giko
B | 30 | dqn

というテーブルがあるとして、
classの中でtestを降順で順位付けして

class | test | rank
-----
A | 30 | 2
A | 40 | 1
B | 50 | 1
B | 30 | 2

みたいな結果を出し、最終的に、classでrankが2の
monaとdqnを取り出したいわけですが、こういうの可能ですか?
ちなみにpostgresでoracleのような分析functionはなしです。
0694デフォルトの名無しさんNGNG
ちなみにrankなしで、
gourp byと、limit 1 offset 1(2番目を取り出す)
を用いてできないかなーと考えているのですが、、、
0695デフォルトの名無しさんNGNG
>>693
ちなみに同点の場合はどうする?
同順をつけるとかは無理っすよ

あまり深く考えない第一印象では
PG側でループしながらやるかな
0696693NGNG
>695

同点は特別に今回は考えなくてもよい状況なんす。
PG側でループしながらというのは?どういうことですか?
0697693NGNG
わぁぁーん(;´д⊂) 無理っすか?
0698デフォルトの名無しさんNGNG
>>693
SELECT *
FROM ( SELECT B.CLASS, B.NAME, B.TEST
          , ( SELECT COUNT(TEST) + 1
             FROM  テーブル A
             WHERE A.TEST > B.TEST
              AND  A.CLASS = B.CLASS ) AS "LANK"
      FROM テーブル B
    ) RESULT
WHERE RESULT.LANK = 2

ちなみに、oracleだとこんな感じでもできる(もっといい方法があるような気も)
postgresうんぬんはよくわからん。スマソ
ただ、データ多いとかえってこないかも。
0699693NGNG
おお!
そんなoracleの分析rank() orverとか使ってるわけでも
ないので、postgresでもできるかも。

これからちょっち実データ作ってトレースしてみます。
0700698NGNG
> AND  A.CLASS = B.CLASS ) AS "LANK"

うっ・・ LANK
0701693NGNG
create table test2(
"class" text,
"test" int4,
"name" text
);

insert into test2 values('A',30,'mona');
insert into test2 values('A',40,'sii');
insert into test2 values('B',50,'giko');
insert into test2 values('B',30,'dqn');

SELECT
*
FROM
(SELECT
B.class,
    B.name,
B.test,
(SELECT
COUNT(test) + 1
FROM
test2 A
WHERE
A.test > B.test
AND A.class = B.class
) AS "rank"
FROM
test2 B
) res
WHERE
res.rank = 2
0702693NGNG
おおおーーーーーーーーーすげぇ。ほんとだ...
sql for smartiesでrankができるってのは見たことあったけど、
rank() orver(partition by A order by A)
相当もできるのかー

ちなみに、
insert into test2 values('A',40,'hiroyuki');
入れても、
SELECT
*
FROM
(SELECT
B.class,
B.name,
B.test,
(SELECT
count(distinct(test)) + 1
FROM
test2 A
WHERE
A.test >= B.test
AND A.class = B.class
) AS "rank"
FROM
test2 B
) res
WHERE
res.rank = 2
こうすればできる〜〜〜ヽ( ・∀・)ノ
0703693NGNG
こんなシンプルにできたとは、、、
698さん頭いいっすね。THX!!!
0704693NGNG
せっかくなので、整形してはっときまふ。

SELECT
*
FROM
(SELECT
B.class,
B.name,
B.test,
(SELECT
count(distinct(test)) + 1
FROM
test2 A
WHERE
A.test >= B.test
AND A.class = B.class
) AS "rank"
FROM
test2 B
) res
WHERE
res.rank = 2
0705693NGNG
あれ、、、(;´ω`)

SELECT                         
  *                         
FROM                         
  (SELECT                         
    B.class,                         
    B.name,                         
    B.test,                         
    (SELECT                         
      count(distinct(test)) + 1                         
    FROM                         
      test2 A                         
    WHERE                         
      A.test >= B.test                         
      AND A.class = B.class                         
    ) AS "rank"                         
  FROM                         
    test2 B                         
  ) res                         
WHERE                         
  res.rank = 2  
0706693NGNG
データに、カブりがなきゃdistinctはいらなくて、698さんのでいけまふ。
0707693NGNG
>692

今頃、藁田YO!!

ところで、
>795のやつなんすけど、
>693のテーブルがsqlで取り出したリレーションだと
してどうsql書けばよいんでしょうか?
0708693NGNG
なんとなく、、、こんな感じかとやってるんですが。

SELECT
  *
FROM
  test2 as Q
WHERE
  Q.name in (SELECT
          res.name
        FROM
          (SELECT
            B.class,
            B.name,
            B.test,
            (SELECT
              count(test) + 1
            FROM
              test2 A
            WHERE
              A.name = Q.name AND
              A.test > B.test AND
              A.class = B.class
            ) AS "rank"
          FROM
            test2 B
          WHERE
            B.name = Q.name
          ) res
        WHERE
          res.rank = 2
        )
0709693NGNG
補足すると、nameをprimary keyとして、
>693はテーブルtest2から取り出したリレーションでQとしています。
0710693NGNG
考えてたらあたまが痛くなった(笑
散歩逝ってきます...と思ってちょっと考えたら、導けた。

SELECT
  res.id
FROM
  (SELECT
    _xn.id,
    (SELECT
      count(__xn.id) + 1
    FROM
      xml_node __xn,
      xml_path __xp
    WHERE
      __xn.id = __xp.ref_node AND
      __xn.id = qqq.id AND
      __xn.document = _xn.document AND
      _int_to_numstr(_xp.d_order) > _int_to_numstr(__xp.d_order)
    ) AS "rank"
  FROM
    xml_node _xn,
    xml_path _xp
  WHERE
    _xn.id = _xp.ref_node AND
    _xn.id = qqq.id
  ) res
WHERE
  res.rank = 2 
0711693NGNG
間違えた。スレ汚してスマソ。

SELECT
*
FROM
test2 as Q
WHERE
Q.name in (SELECT
res.name
FROM
(SELECT
B.class,
B.name,
B.test,
(SELECT
count(test) + 1
FROM
test2 A
WHERE
A.test > B.test AND
A.class = B.class
) AS "rank"
FROM
test2 B
) res
WHERE
res.rank = 2 and
res.name = Q.name
)
0712693NGNG
あれ、、、やっぱ駄目っすねー。
subqueryではできないか。。。(書きすぎでスマソ
0713デフォルトの名無しさんNGNG
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
ってなんでしょう?
シリアライズするのはなんとなくわかるんですけど
どの時点からシリアライズされるのでしょう?
この文が実行されるとすぐ?
0714デフォルトの名無しさんNGNG
>>365
0715デフォルトの名無しさんNGNG
>>713
> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
> ってなんでしょう?

なんでググらんの ?

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE をそのまま「日本語」でググレば...

ttp://www.postgresql.jp/document/pg653doc/j/user/sql-set.htm

とかでてくるぞ。

説明読んでも意味わからんのなら、意味わかるまで使う必要はない。
0716デフォルトの名無しさんNGNG
すみません。質問させてください。
PL/SQLなのですが、あるテーブルのカーソルを作り、
その結果セットから任意のレコード(「n番目」というような)を
取り出したいのですが、これはループしてFETCHさせる以外に
方法はないでしょうか??
0717デフォルトの名無しさんNGNG
副問い合わせの問題なんですけど
select 部品番号 from 部品 where 色='赤色'; と
select 部品番号 from 部品 where 重さ=100;
をそれぞれ単独で実行させた場合は両方ともちゃんと検索できるのですが、
A・・・ select 部門番号 from 供給 where 部品番号 = (select 部品番号 from 部品 where 色='赤色');
B・・・ select 部門番号 from 供給 where 部品番号 = (select 部品番号 from 部品 where 重さ=100);
をそれぞれ実行するとAの方だけエラーになってしまうのですがなぜなんでしょう?
だれか教えてください。
0718デフォルトの名無しさんNGNG
>>717
select 部品番号 from 部品 where 色='赤色'
でレコードは返ってくるの?
返ってこなきゃエラーになると思うんだけど。
0719デフォルトの名無しさんNGNG
>717
in
0720717NGNG
select 部品番号 from 部品 where 色='赤色';

の場合レコードは返ってきます。
0721717NGNG
副問い合わせの結果が複数個だったのでinをつかえばいいのですね。
719さんありがとう
0722デフォルトの名無しさんNGNG
>>717-721
誰も、結合については教えてやらんのか...。
0723デフォルトの名無しさんNGNG
吹く問い合わせの問題なんだからいいんでないの?
0724デフォルトの名無しさんNGNG
>>723
いや、単純に吹く問い合わせについての問題ならいいんだが、>>717 がやりたいことに吹く問い合わせが本当に必要なのかとちょっと思ったんでね。
0725デフォルトの名無しさんNGNG
業者(業者番号、住所)
部品(部品番号、色)
供給(部門番号、部品番号、業者番号)

というデータベースがあったとして、
東京の業者から赤色の部品が供給されている部門の番号を求めるという問題
なんですけど、

select 部門番号 from 供給 where 業者番号 in (select 業者番号 from 業者 where 住所='東京' and 業者番号 in (select 業者番号 from 供給 where 部品番号 in (select 部品番号 from 部品 where 色='赤色')));

このSQL文は間違っているんですか?
0726デフォルトの名無しさんNGNG
>>716
8i以降ならできるよ。
サブクエリにOrder by使ってRownum擬似列を利用しましょう。
select rownum , サブクエリの選択列
from (select XXX from TTT)
これをさらにサブクエリにして固定項目になったRownumをwhere句で使えばおっけー。
構文はヘルプ見てがんばり。
0727デフォルトの名無しさんNGNG
>>725
間違っちゃいないがまんまだな。アクセスが多すぎるぞ。
俺ならこうする。
select 部門番号
from 供給
where 業者番号 in (select 業者.業者番号
         from 業者
         where 業者.住所 = "東京")
and 部品番号 in (select 部品.部品番号
         from 部品
         where 部品.色 = "赤色")
0728デフォルトの名無しさんNGNG
>>725
Access2000 に作らせてみた...

SELECT 供給.部門番号
FROM (業者 INNER JOIN 供給 ON 業者.業者番号 = 供給.業者番号) INNER JOIN 部品 ON 供給.部品番号 = 部品.部品番号
WHERE ((([業者]![住所])='東京') AND (([部品]![色])='赤'));

まあ、データベースになれていないと「まず赤色の部品の番号を求めて、その部品番号を供給している業者を求めて...」と考えたくなる気持ちはよくわかる。
でもその場合でも、

select 部門番号 from 供給
where 部品番号 in (select 部品番号 from 部品 where 色 = '赤')
and 業者番号 in (select 業者番号 from 業者 where 住所 = '東京都');

ぐらいにしとけ。(動作未確認)
0729716NGNG
>>726
今度8i導入するんですけどまだ今は7です。
8iに移行してからになりますが、やってみます。
ホントにありがとうです。
0730デフォルトの名無しさんNGNG
SQLでOR検索ってできますか?
0731デフォルトの名無しさんNGNG
供給(部門番号、部品番号、業者番号)
というデータベースから
どの業者番号からも供給を受けていない部門番号をもとめるにはどうすればいいでしょうか?
0732デフォルトの名無しさんNGNG
not existsを使え
0733デフォルトの名無しさんNGNG
>730
出来ないほうがおかしいと思わない?
0734デフォルトの名無しさんNGNG
すみませんが質問です。
とあるテーブルが2つありまして、
A、シーケンス番号(SEQ)、登録日(MDATE)
B、シーケンス番号(SEQ)、Aのシーケンス番号(A.SEQ)、登録者(MCD)

といった感じになっております。
Aテーブルの情報の詳細をBに置いておくといった感じです。

Aテーブルのレコードと、AがBに参照されている件数をcountでとっていたのですが、
Bテーブルに重複されて入っているデーターも数えてしまって困っています。

重複データーを1件とし、countするにはどうすればいいでしょうか。
select distinct count(mcd) ではだめでした。
0735デフォルトの名無しさんNGNG
>>730
だから、どうしてそういうものの聞き方をする?
やってみたのか?
そんな質問に答えてもらったところで、次は「どうやるの?」って聞くのか?

まず自分でいろいろ検証してみて、それでだめなら具体的に聞け。
0736デフォルトの名無しさんNGNG
なんでテーブル定義もロクに書けないヤツがSQL触ってるんだ?
0737デフォルトの名無しさんNGNG
>>735-736
ネタに反応するなよ・・・。
0738デフォルトの名無しさんNGNG
>>734
distinctした物をcountすれば良し
0739デフォルトの名無しさんNGNG
472 名前:コスモス 投稿日:02/11/20 12:01
まとめ:
Oracle以外データベース製品はたくさんあります。
にもかかわらずなぜみんなOracleなのか?
Informix、DB2などなど。あ、SQL Serverは論外ですよ。(笑)
なぜこれらの製品はそんなにシェアがないのか?

最近思うのは、もしかしたらこれらの製品はOracleよりももっとひどいのかも
しれないと。。。(涙)

データベース業界ではOracleが一番使いやすく性能も出る製品なのだと思い
ます。
データベース業界はまだまだ未成熟な業界だと思います。
これを読んで、「そんなことないよ。Oracleっていいデータベースだよ」と思った
あなたは、Oracleに洗脳されているだけではないでしょうか。
0740デフォルトの名無しさんNGNG
>739
それもう飽きた
0741デフォルトの名無しさんNGNG
Oracleです。

テーブルA
ID1  数値・Null不可
ID2  数値・Null不可
FLG  数値・Null可
※ID1、ID2、FLGで一意です。

ここで、FLGがNullのデータが存在しないID1、ID2 のレコードを取得したいのですが
どう書けばいいのでしょうか。
select a.* from a,
(select id1,id2 from a where flg is null)b
where a.id1=b.id1 and a.id2=b.id2
で取得できるレコード以外のレコード、て感じです。
よろしくお願いします。
0742デフォルトの名無しさんNGNG
>FLGがNullのデータが存在しないID1、ID2 のレコード
よくわかんないけど、
SELECT * FROM A WHERE FLG IS NULL
じゃなくて?
0743デフォルトの名無しさんNGNG
select * from A
where FLG is not null;
じゃだめなのか?
>FLGがNullのデータが存在しないID1、ID2
FLGがnullでないレコードだよね。
もっと深い意味かな? 
0744743NGNG
かぶった。
0745742NGNG
>>743
FLGがNULLのレコードじゃなくて?

>FLGがNullのデータが存在しないID1、ID2 のレコード
↓
FLGがNullの(すなわちFLG)データが存在しない(けど)ID1(と)、ID2(は存在している)レコード
と俺は解釈したが真相はいかに?

って
>>741の「で取得できるレコード以外のレコード、て感じです。」を詠む限りNOT NULLっぽい。
0746デフォルトの名無しさんNGNG
>>741
> ここで、FLGがNullのデータが存在しないID1、ID2 のレコードを取得したいのですが
                         ^
構文エラーです。
0747743NGNG
ちょっと余談だけど、Oracleって、
ID1  数値・Null不可
ID2  数値・Null不可
FLG  数値・Null可
※ID1、ID2、FLGで一意です。

nullも一つのデータとしてのunique index(AK)で
プライマリキーとして(外部制約の親テーブルとして)
できてしまうから
すごいというか、なんでもありというか...
0748741ですNGNG
みなさんありがとうございます。
わかりにくくてすみません。

ID1 ID2 FLG
1  1  Null
1  1  1
1  1  2
1  2  1    ※
1  2  2    ※
1  3  Null
1  3  1
の場合に※のレコードを取得したいのです。
0749デフォルトの名無しさんNGNG
条件が見えん。
0750741ですNGNG
>>748 で、
ID1=1、ID2=1 及び ID1=1、ID2=3 には FLGがNullのデータがありますが
ID1=1、ID2=2 にはFLGがNullのデータがありません。それを取得したいのです。
0751ねこまNGNG
select * from A where ID1 not in (select ID1 from A where FLG is not NULL);
違うかな?
0752751NGNG
select ID1, ID2
0753743=749NGNG
SELECT *
FROM A AS t1
WHERE not exists (
select * from A where FLG is null
and ID1 = t1.ID1 and ID2 = t1.ID2
);
0754741ですNGNG
>>753 できました!ありがとうございます!
他の方もありがとうございました!

このスレ「困った時に頼りになるスレ」No1です。私的に。
前スレで次スレ立ててと騒いでたのは私です。てなわけでぜひパート3も!
0755デフォルトの名無しさんNGNG
>>753
すげー、きれいだ。感動した。
漏れもそうだけど、
インラインビューをやたら使う
Ora厨は参考にするといいかも。
0756デフォルトの名無しさんNGNG
質問です。
商品データで、商品ごとにサイズや色のバリエーションがあるような場合、
どういうテープルを設計するんでしょうか?

現在は、商品.色 に Red,Blue などとして、プログラム側で分解処理して
いるのですが、激しく間違っているような気がしてます。かといって、
テーブル商品色
商品ID | 色
2009 | Red
2009 | Blue
0323 | White
みたいなテーブルを作るのも効率悪そうです。
とりあえずサイズや色によって、価格など他の要素は変化しないのですが、
どういうテーブルが最適なのでしょうか?
0757デフォルトの名無しさんNGNG
どっかで同じような質問見たな
0758デフォルトの名無しさんNGNG
>>756
何をしたいかによるよ。
色に関した処理をあまりしないなら、プログラム側でやってもいいと思う。
色についていろいろ処理する必要がある (何色が売れてるとか知りたいとかね) なら、色テーブルを持つのがいいんじゃないの ?
0759デフォルトの名無しさんNGNG
>>758
ありがとうございます。
とりあえず今回は現状のままでやってみることにします。
0760デフォルトの名無しさん NGNG
oracle8iのSQL文を教えて下さい。

TBL_A.日付には、VARCHAR2で'19950101'と入っています。('YYYYMMDD')
TBL_B.日付には、VARCHAR2で'021215'と入っています。('YYMMDD')

TBL_A.日付以降の行をTBL_Bから抽出したいのですが、馬鹿な私は。。。

SUBSTR(TBL_A.日付, 3, 6) <= TBL_B.日付 とやってしまいました。

という訳で、どなたかまっとうなコーディング方法を教えてください。

ちなみに10月から、いきなりシステム部門に転属させられた文学部卒です(藁&泣)
0761デフォルトの名無しさんNGNG
TO_DATEしてから比較
0762デフォルトの名無しさんNGNG
761さん、ありがとうございます。
TO_DATE(TBL_A.日付) <= TO_DATE(TBL_B.日付) で良いのでしょうか?
この場合、95-01-01 <= 02-12-15 となると思うのですが、
大小関係は正しく判断されるのでしょうか?
0763デフォルトの名無しさんNGNG
まずはやってみれ。
0764デフォルトの名無しさんNGNG
明日が本番なもので。。。
今日中に解決しないといけないのです。試す環境が自宅にあればいいのですが。。。
0765デフォルトの名無しさんNGNG
何が本番なんだ?
0766デフォルトの名無しさんNGNG
担当システムの本番運用開始なのです。(T.T)
0767デフォルトの名無しさんNGNG
ハァ?
明日、リリースなのにこんなこと
しとるのか?
ネタ+女だろ。
0768デフォルトの名無しさんNGNG
>>766
ワロタ
0769デフォルトの名無しさんNGNG
762,764,766です。
どなたかマジレスお願いします。m(__)m
初心者にとっては本当に真面目な疑問なのです。日程も本当です。
朝速攻で対処しないといけないのです。
0770デフォルトの名無しさんNGNG
>>769
だったらすぐ会社 or 現地に行って試せよ、ヴォケ。
0771デフォルトの名無しさんNGNG
>>770
そんなにカッカするなよ、便秘か?
女の子だし、簡単だから
もっと遊びたいのだが。
0772デフォルトの名無しさんNGNG
鍵を持っていないから入れません。
こっちは遊びじゃないんです。
教えて下さい!
0773デフォルトの名無しさんNGNG
>>772
上司の携帯に電話して、鍵あけてもらえ。
0774デフォルトの名無しさんNGNG
携帯#知りません。
0775デフォルトの名無しさんNGNG
769さん、みんな実はわからないから答えられないんだよ(w
本屋にでも行った方が早いよ。まさか寒いから嫌とか言わんだろうが。
0776デフォルトの名無しさんNGNG
可愛そうだから、777引いたヤシが答えてやろう。
0777デフォルトの名無しさんNGNG
>>775
おまえ、769だろ。
to_dateくらい誰でも知っとるわ。
煽っても無駄だ。
0778デフォルトの名無しさんNGNG
っで、何歳?
最後は教えてやるから、
のってきてちょうだい。
0779デフォルトの名無しさんNGNG
おもしろすぎっ!
ちなみに772は質問者とは別人だね。何故かsageになってるもんな。
でもって、漏れはORACLEよくわからんから答えられんw
>>776
999が答えてやれww
0780デフォルトの名無しさんNGNG
また今覗いたが
もう、こないのか769。
返事したら教えてやるぞ。

もう分かっちゃったのか?
0781デフォルトの名無しさんNGNG
769です。
25才です。本当に教えて下さい。お願いします。m(__)m
0782デフォルトの名無しさんNGNG
なんで、情死すななんかに
入っちゃったの?
0783デフォルトの名無しさんNGNG
「な」が多かった。
0784デフォルトの名無しさんNGNG
わかりません。いきなりの異動でしたので。。。
人事はPCが使える→じゃあシステム課へ といった感覚なのでしょう。。。
ホントに寝ててもプログラムが気になります。初心者なので何でもないような事でも
次々と疑問に思い始めると、キリがないのです。ホントに泣いてます。
0785デフォルトの名無しさんNGNG
もういいかな。教えてやるよ
TO_DATE(TBL_A.日付,"YYYYMMDD") <= TO_DATE(TBL_B.日付,"YYMMDD")
だよ。
他にも女の子いるの?合コンしよ。 
0786オラクルマスターNGNG
>>785
TO_DATE(TBL_A.日付, 'YYYYMMDD') <= TO_DATE(TBL_B.日付, 'YYMMDD')
だろが!
0787デフォルトの名無しさんNGNG
おっ、シマータ
0788デフォルトの名無しさんNGNG
んで、どこ勤務なの?
0789デフォルトの名無しさんNGNG
ありがとうございます。フォーマットを指定すればいいのですね。
最後の疑問ですが、19950101 <= 021215 だと大小関係が逆にはならないのですか?
0790デフォルトの名無しさんNGNG
勤務地は都内です。
0791デフォルトの名無しさんNGNG
'021215'は0002/12/15ということなので上手く動きません。
0792オラクルマスターNGNG
>>789
日付型は文字型とは違うので比較の書式などありません。
すべて内部的な書式に従います。
0793デフォルトの名無しさんNGNG
789
大丈夫だよ、その為に日付変換してるんだろ。
それより、早くどこ勤務してるの?
都内なんだ。それなら、合コンしよ。
漏れら、別にオタクじゃないよ。
0794デフォルトの名無しさんNGNG
すまん。「早くどこ勤務してるの?」
は抜いてくれ。消し忘れた。
0795デフォルトの名無しさんNGNG
792さん、ありがとうございます。
つまり、桁数(特に年)が異なる場合でもTO_DATE関数使用後に比較すればよろしいのですね。
勉強になりました。ということは、791さんは誤りということですよね。
0796デフォルトの名無しさんNGNG
19950101 と 501215 はどっちが大きいのですか?
0797デフォルトの名無しさんNGNG
>>793
クリスマス近いからあせっていますね(w
0798793NGNG
Y2k(死語だな)
のことを言っているようだが、
そんなデータがあるなら
テーブル設計をYYYYMMDDにしない
方がおかしい。
0799オラクルマスターNGNG
>>795
比較が成功すれば、日付型という一定の形(固定長7バイト)になりますから
そのまま比較できます。
要はどのように変換するかが重要なのです。
'021215'の場合、2002/12/15と1902/12/15のどちらに変換するか間違えなければ
問題ありません。
0800オラクルマスターNGNG
↑
「変換が成功すれば」だった・・・
0801793NGNG
8iなら大丈夫。
ちゃんと02→2002になる。
>>797
おう、必死だよ
0802デフォルトの名無しさんNGNG
793さん、オラクルマスターさん、本当にありがとうございました。
0803793NGNG
おい、それでおしまいかよ!
0804793NGNG
>>793
ワロタ
0805デフォルトの名無しさんNGNG
>>804
名前を間違えただけか?

合コンしたら教えてやる
にしとけばヨカータ...
しかし、女と分かると速攻で
スレが伸びるな。
0806806NGNG
CREATE TABLE SalesRegions (
name CHAR(10) NOT NULL,
tot_sales DECIMAL(8,2) NOT NULL,
region INTEGER NOT NULL
);

INSERT INTO SalesRegions VALUES('Able', 100.000, 1);
INSERT INTO SalesRegions VALUES('Baker', 900.00, 1);
INSERT INTO SalesRegions VALUES('Brown', 900.00, 1);
INSERT INTO SalesRegions VALUES('Carey', 700.00, 2);
INSERT INTO SalesRegions VALUES('Delta', 600.00, 2);
INSERT INTO SalesRegions VALUES('Eddy', 500.00, 2);
INSERT INTO SalesRegions VALUES('Fred',900.00, 3);
INSERT INTO SalesRegions VALUES('George', 700.00, 3);
INSERT INTO SalesRegions VALUES('Herman', 600.00, 3);

select * from salesregions;

nametot_salesregion
Able 100.001
Baker 900.001
Brown 900.001
Carey 700.002
Delta 600.002
Eddy 500.002
Fred 900.003
George 700.003
Herman 600.003
0807806NGNG
SELECT
R1.name,
R1.region,
R1.tot_sales,
count(*)
FROM
SalesRegions AS R1,
SalesRegions AS R2
WHERE
R2.tot_sales >= R1.tot_sales AND
R1.region = R2.region
GROUP BY
R1.name,
R1.region,
R1.tot_sales
-- HAVING COUNT(*) = 2

でランキングは出せますが、
From句が結構な処理のSubQueryな場合ってどのようにしたらよいのでしょう?
0808806NGNG
簡潔にした例ですが、、、

SELECT
R1.name,
R1.region,
R1.tot_sales,
count(*)
FROM
(select * from SalesRegions where region in (1,2)) AS R1,
(select * from SalesRegions where region in (1,2)) AS R2
WHERE
R2.tot_sales >= R1.tot_sales AND
R1.region = R2.region
GROUP BY
R1.name,
R1.region,
R1.tot_sales

こう同じsubquery二回発行するってのもアレですよね?
optimizerに吸収されるのかもしれませんが。

何か上手くやれないもんでしょうか?
where句は集約の条件部で変えられないですよねー
0809806NGNG
ちなみに、DBはPostgresでWith句とかは使えないっす。
0810デフォルトの名無しさんNGNG
>where句は集約の条件部で変えられないですよねー
が引っかかるが、
FROM句を
SalesRegions AS R1,
SalesRegions AS R2
に戻して、
WEHRE句に
and R1.region in (1,2)
を追加じゃだめなのか?

ランキングとは
tot_salesのランキングでいいのか?
ちょっと、ランキングの条件が見えん。

あと、このテーブルはnameでユニークなのか?

from句内のクエリはサブクエリとは
言わず、インラインビューというはず。
0811806NGNG
>810

なるへそーインラインビューね。覚えますた。
実際はその、インラインビューがもっと複雑で、
where句に書くわけにもいかんのです。>808はイメージで。

nameはprimary keyと考えてよかとです。
条件はrigeonごとのtot_salesのランキングをしたいということです。

Oracleとかだと、こんな感じでしょうか?
select ... rank() over (partision by rigeon order by tot_sales)
0812デフォルトの名無しさんNGNG
日付項目を持つレコードを月別にグループ化したいのですが
どう書けばよいのでしょうか。おねがいします。
Accessです。
0813デフォルトの名無しさんNGNG
>>812
年/月だけの項目でグループ化する
Format([テーブル1]![フィールド1],"yyyy/mm")みたいの。
DateSerialで1日の日付を作っても可
0814デフォルトの名無しさんNGNG
>>812
select format(日付カラム,"yyyy/mm"),sum(数値カラム)
from table
group by format(日付カラム,"yyyy/mm")
0815812NGNG
>>813 >>814
ありがとうございます。
0816デフォルトの名無しさんNGNG
JavaサーブレットからPL/SQLストアドを呼んで、
結果セットを取得してJavaサーブレットに返す場合
普通はどうやってますか?
OUTパラメータにカーソル変数を指定したりできませんよね・・・
うーん、わからない・・・(;´д`)
0817デフォルトの名無しさんNGNG
Access2000です。
日ごとのアクセスカウンターを作っています。
よろしくお願いします。

日付時刻型のフィールドを年月日ごとにカウントするのは
SELECT FORMAT(日付型のフィールド名,'YYYY/MM/DD'),COUNT(*)
FROM テーブル名
GROUP BY FORMAT(日付型のフィールド名,'YYYY/MM/DD')
で、できたのですが。
これではデータが入ってる日付以外はカウントすることができません。
データが入ってない日付の場合に
0という結果を返すSQL文を書くことができるのでしょうか?

テーブルのデータ名
- 日付時刻型 -
2002/12/01
2002/12/01
2002/12/03

希望する結果
2002/12/01 2
2002/12/02 0
2002/12/03 1
0818817NGNG
>>817
書き間違いです。失礼しました。
テーブルのデータ名→テーブルのデータ
0819デフォルトの名無しさんNGNG
>>817
SQLの世界において、 存在しないデータからデータを
作ることは神でないと無理だ。
もう一つ、日付データのテーブルを作って
m1
a 日付型
a
2002/12/01
2002/12/02
2002/12/03

t1
a 日付
a
2002/12/01
2002/12/01
2002/12/03
2002/12/03

SELECT a,Count(*) AS cnt
FROM t1
GROUP BY a
ORDER BY a
UNION
SELECT a,0 as cnt
FROM m1
WHERE
NOT EXISTS
(SELECT * FROM t1 WHERE a = m1.a) ;
これが嫌なら、VBAでdateaddで1日ずつ
足して、それについてカウントしてくかだな。
0820デフォルトの名無しさんNGNG
SQLの世界ではなくDBの世界と
言った方がいいかな、まぁ、どっちでもいいけど
0821817NGNG
>>819
ありがとうございます。
やはり無理ですか。やっとすっきりしました。

日付用のテーブルを作るやり方は思いつきませんでした、このやり方はいいですね、
しかしASP側からSQLを実行するカウンターなので今回はASP側でdateaddして処理しようと思います。
では、また何かありましたらよろしくお願いします。
0822デフォルトの名無しさんNGNG
>>819
すげー、これも感動した。
もしかして>>753と同一人物?
このスレマターリしてるし、ホント役に立つ。
データベーススレとは大違いだ。
0823デフォルトの名無しさんNGNG
リレーショナルを忘れるな
0824デフォルトの名無しさんNGNG
>>823
>>822は
データベーススレ
http://pc3.2ch.net/test/read.cgi/tech/1020158297/l50
を言っている。
0825デフォルトの名無しさんNGNG
<元テーブルAAA>
A B C D
101 10 01 00
102 10 01 00
102 10 02 01
102 20 01 00
103 10 01 00

A 伝票番号
B 明細番号
C ID
D 削除ID

<出力結果>
101 10 01 00
102 20 01 00
103 10 01 00

ABが同一でDに対応したCのレコードをペア取り除いた結果を表示するSQL文を誰か
教えてください。おながいすます。非常に困ってます。
0826デフォルトの名無しさんNGNG
>>825
not exists文の回答レスが続くな。
>>822
そうだよ、同一人物、漏れだよ。
ちなみに合コン誘ったのに逃げられたのも漏れ。
>>802 まだ受け付けてるよ、
もし見ているのならレスしてくれよ。
ホントコピペにでてくるような
PCオタクじゃないからさ。
このスレみてる女の子、合コンしようぜ。
おながいすます。非常に困ってます(ワラ
っでSQLはこれ。
SELECT *
FROM AA AS t1
WHERE
not exists
 (select * from AA
  where A= t1.A and B = t1.B and C = t1.D )
and
not exists
 (select * from AA
  where A = t1.A and B = t1.B and D = t1.C)
0827825NGNG
>>826
うまくいきました。
これで帰れます。昼過ぎから悩んで業務終了後本屋でSQLの本買ってきたのですが
よくわかりませんでした。SQL文を見て、リファレンスと見比べて、ああこういうことだったのか
と今ちょっとわかったような気がします。とてもありがとうございますた。
0828デフォルトの名無しさんNGNG
>>816
オラクルは結果セットを戻り値として返せないから
検索系のSPは使えない。
0829デフォルトの名無しさんNGNG
以下のようなユーザーIDと金額を収めたテーブルが
あります。ユーザーで名寄せして、そのユーザーに
対応する最も大きい金額をだけ抽出したいのです。
お助けください。DBは PostgreSQL 7.2 です。

user_id price
1001 20000
1002 21000
1003 20000
1001 25000
1002 19000

求めたい結果
1001 25000
1002 21000
1003 20000
0830デフォルトの名無しさんNGNG
>>829
SELECT user_id,MAX(price) FROM hogehoge GROUP BY user_id
0831デフォルトの名無しさんNGNG
SELECTで複数条件指定の仕方がわかりません。

AND検索の対象となるフィールドが「ID」「NAME」「CAR」の場合
IDを指定して検索したい時、NAMEやCARはWHEREに組み込まれないように
したいのです。もちろん複数のフィールドを指定して検索する場合もあります。

MS-ACCESSであれば、簡単に出来るのですが、SQLだと?
0832デフォルトの名無しさんNGNG
>>831
> IDを指定して検索したい時、NAMEやCARはWHEREに組み込まれないように
> したいのです。

指定しなけりゃいいと思うけど ?
SELECT * FROM TableName WHERE ID = xxxx; じゃまずいのか ?

> MS-ACCESSであれば、簡単に出来るのですが、SQLだと?

Access に SQL ビューと言うものがあるのは知ってるか ?
0833デフォルトの名無しさんNGNG
>>832 どうもすみません。
ただし、NAMEやCARという項目でも検索したいのです。
指定しない場合は IFなどで条件分岐しなければいけませんよね。
例えばNAMEを空欄にした時は、、、
IF NAME Is Null
SELECT * FROM TableName WHERE ID = xxx And CAR = ****
でもこれをやっていったら、条件分岐だらけになってしまって。

AccessではWHERE内にLikeを使ってます。
例)WHERE TableName Like "*" & [検索文字] & "*"
これだと[検索文字]に何もいれなくても、Nullになりません。
SQLではどのようにするのでしょうか?
0834デフォルトの名無しさんNGNG
WHERE NAME Like "'%" & Replace(nz([検索文字],""),"'","''") & "%'"
0835デフォルトの名無しさんNGNG
>>833
その SQL を呼び出す言語がわからんけど...

> IF NAME Is Null

と書いてるから、VB 系だろうと想定すると...

Private Sub AddCondition(ByRef Condition As String, NewCondition As String)
 If Condition <> "" Then
  Condition = Condition & " AND"
 End If
 Condition = Condition & NewCondition
End Sub

Dim Condition As String
Condition = ""
If Not ID Is Null Then AddCondition Condition, "ID = '" & ID & "'"
If Not NAME Is Null Then AddCondition Condition, "NAME = '" & NAME & "'"
If Not CAR Is Null Then AddCondition Condition, "CAR = '" & CAR & "'"

として、"SELECT * FROM TableName WHERE " & Condition & ";" を実行すればいいと思う。

> 例)WHERE TableName Like "*" & [検索文字] & "*"

SQL も、Like 演算子持ってる奴が普通だから、これでいいなら同じようにすればいい。
(ただし、ワイルドカードが '*' とは限らないから、使う DBMS のマニュアルなどで確認すること。)

> これだと[検索文字]に何もいれなくても、Nullになりません。

でも、余分なものも拾うわけだが、それはいいんだよね。
0836デフォルトの名無しさんNGNG
>>834
ストアドプロシージャ上で記述しようとしたら、ダメでした。
'nz'は関数名として認識されません。 というエラーが出ました。
0837デフォルトの名無しさんNGNG
>>835 ありがとうございます。
ストアドで呼び出しています。実際の[検索文字]の部分は @パラメーター名 です。

Access mdb でやると、いとも簡単に出来る今回のケースが
SQL-adp でやると、全然上手くいかない。SQL文をもっと勉強しとけばよかった。
0838デフォルトの名無しさんNGNG
>>837
execで動的sqlを使え。
0839デフォルトの名無しさんNGNG
>>837
SQL-Server は使ったことないからわからん。
MS に聞くのが吉。

本当にストアドにする必要があるのか疑問に感じるけど。
0840デフォルトの名無しさんNGNG
SQLってなんですか?
0841デフォルトの名無しさんNGNG
>>840
君はこのスレ見なくていいよ。
0842デフォルトの名無しさんNGNG
やっぱりわからん…プロシージャ上で、条件に合わせてWHERE句が増減出来れば
よいのだが。

だれか助けてください!
0843デフォルトの名無しさんNGNG
だから>>838の言ってること
調べたのか?

exec('SQL文')
で動的SQLがストアドで使用できる。
0844デフォルトの名無しさんNGNG
>>843 動的SQL
いろいろ調べましたが、難しい言い回しの記述ばかりで、全然理解できてません。
未だに調査中です。
0845デフォルトの名無しさんNGNG
>>843
ちなみにAccessプロジェクト上で作成可能なのでしょうか?
SQLサーバーは参照だけで、触ることが出来ないのですが。
0846デフォルトの名無しさんNGNG
>ストアドプロシージャ上で記述しようとしたら、ダメでした。
↓↓↓
>SQLサーバーは参照だけで、触ることが出来ないのですが。

言っとること矛盾してないか?
0847デフォルトの名無しさんNGNG
>>846
いえ、Acceessプロジェクト上のストアドプロシージャを編集してるんです。
あくまでもクライアントサイドです。
0848829NGNG
>>830
ありがとうございます。
実は前述のテーブルには、ユニークなIDと日付の情報
(型はTimesamp)も入っていて、本当はそれも抜き出したい
のです。(先に言え、って感じですよね)
つまり、ユーザーで名寄せして、そのユーザーに対応する
最も大きい金額と、その金額の行のIDと日付を抽出したい。
どうかお知恵を。

id user_id price date
1 1001 20000 19:10:00.496575+09
2 1002 21000 19:20:00.496575+09
3 1003 20000 19:30:00.496575+09
4 1001 25000 19:40:00.496575+09
5 1002 19000 19:50:00.496575+09

求めたい結果
4 1001 25000 19:40:00.496575+09
2 1002 21000 19:20:00.496575+09
3 1003 20000 19:30:00.496575+09

(DBはPostgreSQL 7.2)
0849デフォルトの名無しさんNGNG
要するに >>831から続いてる質問というのはこれと同じことですか?
http://www.users.gr.jp/ml/archive/sql/4318.asp

ただこのメーリングリスト。辿っていっても答えが無いのが惜しい。
0850デフォルトの名無しさんNGNG
>>846
ストアドはSQL鯖上に組み込むから
サーバ上の話になるんだよ。
CREATE PROCEDURE @id,@car,@name
as
declare @sqlstr varchar(1000)
declare @sql_select varchar(500)
declare @sql_where varchar(500)
set str_select = "select * from table1 "
set @sql_where = ""
if @id is not null
begin
 set @id = replace(@id,"'","''")
 set @sql_where="where id = '" + @id + "'"
end
if @car is not null
begin
 set @car = replace(@car,"'","''")
 if @sql_where = ''
  begin
   @sql_where="where car = '" + @car + "'"
  end
 else
  begin
   @sql_where= @sql_where + " and car = '" + @car + "'"
  end
end
・・・
set @sqlstr = @sql_select + @sql_where
exec(@sqlstr)
0851デフォルトの名無しさんNGNG
>>850

可変条件の検索プログラムで SQL文を組み立てるときに
最初の条件は where それ以降は and とか if文でひたすら
分岐させてるのって面倒じゃない?

もれは、こうやってベースとなる文に必ず真となる条件を
はじめから付けてしまっている。あとは全部 and でつなぐだけだね。
query = "Select * From table Where (1=1) ";
if(condition1 != null) SQL += " condition1 = " + condition1;
if(condition2 != null) SQL += " condition2 = " + condition2;
if(condition3 != null) SQL += " condition3 = " + condition3;
0852851NGNG
すまん。肝心の and が抜けてた。

query = "Select * From table Where (1=1) ";
if(condition1 != null) SQL += " and condition1 = " + condition1;
if(condition2 != null) SQL += " and condition2 = " + condition2;
if(condition3 != null) SQL += " and condition3 = " + condition3;
0853デフォルトの名無しさんNGNG
おっ!それいいね。
サンクスコ。
0854850NGNG
>>850のレスは
s/>>846/>>847
だった。
0855デフォルトの名無しさんNGNG
>>851
ここでいう condition1 や condition2 とは何を意味するのでしょうか?
フィールド名?パラメータ名?
0856850NGNG
>>855
これ以上は自分でがんがりなさい。
ついでに
>>848
SELECT user_id,price,date
FROM table1 t1
where price = (select max(price) from table1 where user_id = t1.user_id)
order by user_id;
0857デフォルトの名無しさんNGNG
>>848
Postgre なら...

select distinct on (user_id) user_id, price, date from table_name order by price;

でいけるかと。
0858848NGNG
>>850
ありがとうございます。ちょっと感動しました。
こういうのは本だけ読んでても、やっぱ頭がよくないと
できないですね。

>>848
残念ながら以下のようなエラーが表示されました。
SELECT DISTINCT ON expressions must match initial ORDER BY expressions
0859デフォルトの名無しさんNGNG
>>858
多分、distinct on 使用は
エラーメッセージのように行を
特定させないといけないみたいだ。
order by user id, price desk
じゃないかな。

頭は関係ないよ。経験だよ
(知ってるか、知らないかだけ)。
0860デフォルトの名無しさんNGNG
たまたまプロシージャーの話が出てたけど、
WHEREのLike条件の時って

SELECT * FROM TABLE FieldName Like @パラメータ

って出来ますか?
なんかワイルドカードで囲えないんですけど。
0861デフォルトの名無しさんNGNG
>>858
> 残念ながら以下のようなエラーが表示されました。
> SELECT DISTINCT ON expressions must match initial ORDER BY expressions

すまん、今手元に動作環境がないのでマニュアル頼りで書いてた。
DBMS の気持ちになってみれば、(ある種) 集約するんだからソートは必要なんだろうね。
(どうせ、distinct on で一行になるんだから、自動でやってくれてもいいと思うけど...。
あと、一言マニュアルにも書いて欲しいぞ。)

select distinct on (user_id) user_id, price, date from table_name order by user_id, price;

で、試してみて。
0862858NGNG
>>859
>>861
ありがとうございます。
select distinct on (user_id) user_id, price, date from table_name order by user_id, price;
これでOKでした。

どんどん経験を積んでいけるように努めます。
0863858NGNG
あっ・・・

>>848
で書いた最初の問いかけに抜けていたのですが、
結果は価格の高い順にソートさせたいのです。

>>859 >>861
で挙げられていた「order by user_id, price desc」だと
user_idでソートされてしまい、「order by price desc, user_id」だと
「SELECT DISTINCT ON expressions must match initial ORDER BY expressions」
とエラーが出て、DISTINCTで指定したカラムがORDER BYの最初に来ないと
ダメだぞ、と怒られてしまいます。

この場合は >>856 のようなやり方しかないのでしょうかね。
0864デフォルトの名無しさんNGNG
>>860
SELECT * FROM TABLE FieldName Like '%' + @パラメータ + '%'
0865デフォルトの名無しさんNGNG
>>863
よく考えてみると、distinct on
の仕組みから無理だな。
priceのソート順を優先させると
意味の無いものになってしまう。

>>856がいいよ。サブクエリ使える
DBMSで全て使用可能な構文だし。
0866デフォルトの名無しさんNGNG
ここはみんな親切ですね。2chじゃないみたいだ。
0867デフォルトの名無しさんNGNG
スレ(テーマ)違い気味だが、最近秀和システムから出版された
「SQL逆引き大全」、内容がひど過ぎ。
ざっと読んだだけで、

・誤植(単純ミス、誤字、脱字等)が4箇所
・明らかな誤り(著者の知識不足、確認漏れが原因)が10箇所以上
・誤りではないが、SQLが最適でないものが、10箇所以上
・誤りとまでは言えないが、解説の不備(Oracle9iでJoinがサポート
 されている点に言及されていない、等)が複数箇所

この分野の類書は数多いが、今まで見た中で一番ひどい内容。
内容をよく確かめずに購入してしまった俺も悪いが、ちょっと腹が立った
ので、晒しage。
0868デフォルトの名無しさんNGNG
>>867
で、どうしろと?
(気持ちはわからないでもないが、ここで怒りをぶちまけられても・・・)
0869デフォルトの名無しさんNGNG
他にSQLスレ無いみたいだからまあ仕方ないのかな
0870デフォルトの名無しさんNGNG
マターリといい感じできてるから
あまり無闇にageない方がいいかも。
0871デフォルトの名無しさんNGNG
>>867
吉牛のコピペで書いた方がおもしろかったのに。(w
0872デフォルトの名無しさんNGNG
質問です。

> desc test

ID1 ID2 VALUE
---------- ---------- ------------------
1 1 3
2 2 4
3 2 6

というテーブルがあり、このVALUEをnとすると、

”2^n”

という計算を施し、この値をVALUEに入れたい(updateさせたい)のですが、ORACLE8.1.7でどのようにやればいいのでしょうか?つまり、

ID1 ID2 VALUE
---------- ---------- ------------------
1 1 8
2 2 16
3 2 64

というようにしたいのですが。。。
0873デフォルトの名無しさんNGNG
>872
UPDATE TABLE1
SET VALUE = POWER(2,VALUE)
当方SQLServer
http://www5c.biglobe.ne.jp/~slaper/private/Oracle.htm
を見るとおらくるでもいけるかもね。
0874IGURONGNG
ORACLE9iでのUPDATE文について質問させてください。
TAB_A TAB_B
X Y L M
--- ---
1 9 1 3
2 9

<やりたいこと>
'TAB_A.X'と'TAB_.L'を結合し'TAB_A.Y'列を'TAB_B.M'列の値で更新
'TAB_A.X'に結合する'TAB_.L'の値が存在しないときは'0'を設定
((*) 'TAB_A.X','TAB_.L'列はプライマリー制約)

�@ UPDATE TABLE TAB_A TA
SET TA.Y = ( SELECT NVL(TB.M,0)
FROM TAB_B TB
WHERE TA.X = TB.L(+));

�A UPDATE TABLE TAB_A TA
SET TA.X = ( SELECT TB.M
FROM TAB_B TB
WHERE TA.X = TB.L)
WHERE TA.X IN (SELECT TB.L
FROM TAB_B TB
WHERE TA.X = TB.L);

�@のようなSQLを作成したのですが、'TAB_A.Y'のNOT NULL制約に
引っかかってしまいます。
�AのSQLで結合可能な列は更新できたので
どうやら外部結合ができていないようです。

どうすれば�@のようなUPDATEが可能か教えてください。
0875IGURONGNG
<TAB_A>
X Y
---
1 9
2 9

<TAB_B>
L M
---
1 3

すみませんTBL例が見づらかったので
再度書き込みさしてもらいました。
よろしくお願いします。
0876デフォルトの名無しさんNGNG
>>874-875
TAB_Bにあるときとない時の2回に分けて更新したら?
0877デフォルトの名無しさんNGNG
>>873
ありがとうございます。
ばっちりできました!
0878デフォルトの名無しさんNGNG
>>874-875
SQLServerでは
UPDATE TAB_A
SET Y =
(SELECT ISNULL(TB.M, 0)
FROM TAB_A TA2
LEFT OUTER JOIN TAB_B TB ON TA2.X = TB.L
WHERE TAB_A.X = TA2.X)
でうまくいった。
Olacleでは
UPDATE TABLE TAB_A TA
SET TA.Y = ( SELECT NVL(TB.M,0)
FROM TAB_B TB,TAB_A TA2
WHERE TA2.X = TB.L(+)
AND TA.X = TA2.X);
になるかどうかは知らん。
0879デフォルトの名無しさんNGNG
>>867
その本買ってしまった・・・
どこがどうおかしいのか教えていただけませんか。
スレ違いか・・・
0880デフォルトの名無しさんNGNG
>>879

> その本買ってしまった・・・
> どこがどうおかしいのか教えていただけませんか。


【優先度が高い?箇所のみ抜粋】

■ 012 2つのテーブルを関連付けて表示する (P29)

[Oracle]
SELECT P.PREFNAME, C.CITYNAME
FROM PREF P, CITY C
WHERE P.PREFID = C.PREFID

となっていますが、Oracle 9i では Join がサポートされていますので、SQL Server / Jet と
おなじ構文で問題ないはずです。
(前提条件として、バージョンが明記されていないのが問題だと思います)
019(3つのテーブルを関連付けて表示する)、020(2つのテーブルを関連付けたときに、片方の
テーブルに一致する値がなくても表示する)、021(2つのテーブルを関連付けたときに、最初に
記述したテーブルに一致する値がなくても表示する)も同様です。


■ 054 文字列の右側を特定の文字で埋めて表示する (P72)

[Jet]
「関数RPADもしくは、それにかわる構文は用意されていない」
となっていますが、文字列連結演算子 & 、Left$関数を使用すれば同等の処理が可能です。
055 (文字列の左側を特定の文字で埋めて表示する)についてもほぼ同様です。

(>>881 に続く)
0881デフォルトの名無しさんNGNG
(>>880 の続き)

■ 056 数値を四捨五入して表示する (P74)

[Jet]
「関数ROUNDもしくはそれにかわる構文は用意されていない」となっていますが、下記のように、Fix関数を使用して元の値に0.5を加えた値を切り捨てれば、
同等の処理が実現できます。

SELECT Fix(567.89 + 0.5) FROM dual

057についてもほぼ同様です。

■ 058 数値を切り捨てして表示する (P76)

[SQL Server]
「関数TRUNCもしくはそれにかわる構文は用意されていない」となっていますが、下記のように、FLOOR関数を使用すれば同等の処理が可能です。

SELECT FLOOR(567.89) FROM dual

(旧バージョンは確認していませんが、少なくともSQL Server 2000 ではFLOOR関数が
使用可能です)

[Jet]
「関数TRUNCもしくはそれにかわる構文は用意されていない」となっていますが、下記のように、Fix関数を使用すれば同等の処理が可能です。

SELECT Fix(567.89) FROM dual

059についてもほぼ同様です。

(>>882 へ続く)
0882デフォルトの名無しさんNGNG
(>>881 の続き)

■ 082 日付の曜日を表示する (P100)

[SQL Server]
「該当関数はサポートされていない」
となっていますが、下記のように、DATENAME関数を使用すれば同等の処理が可能です。

SELECT DATENAME(weekday, UPDATETIME) FROM CUSTOMER

(旧バージョンは確認していませんが、少なくともSQL Server 2000 ではDATENAME関数が
使用可能です)


■ 105 パターンマッチングにおいて条件に一致するレコードを表示する (P127)

「Jetでは記号「%」ではなく、「*」を使っていることに注意してください」
とあり、SQL記述例も「*」となっていますが、ミドルウェアにADOを使用する場合は、「%」を使用
します(ただし、CurrentDb().OpenRecordset メソッド、DoCmd.OpenQuery / RunSQL メソッドの
実行時は、常にDAOの構文解釈で実行されます)ので、解説が不足しています。

163(パターンマッチングにおいて条件に一致するデータのみに更新する)、
178(パターンマッチングにおいて条件に一致するデータを別の表に追加する)、
179(パターンマッチングにおいて条件に一致するデータで新しい表を作成する)についても、
ほぼ同様です。(163 の「データのみに更新」は「データのみを更新」の誤りでは?)

(>>883 へ続く)
0883デフォルトの名無しさんNGNG
(>>881 の続き)

■ 164 重複レコードを削除して重複をなくす (P192〜193)

[Jet] ワクの囲い方が不適切。(明らかに誤り)


■ 187 複数テーブルからあるテーブルにすべてを追加する (P218〜219)

「Jetの場合、INSERT INTO〜SELECT文とUNION集合演算子の組み合わせはサポートされていないため、
分けて実行する以外にできません」とありますが、これは誤りで、下記の構文を使用すれば、クエリA
を作成することなく、単独のSQL文で処理可能です。(Jet3.5、4.0で動作確認済み)

INSERT INTO CUSTOMER_OKI_HO
SELECT *
FROM
[SELECT * FROM CUSTOMER WHERE PREFID = '02'
UNION SELECT * FROM CUSTOMER_HOKKAIDO]. AS A

189(複数テーブルからあるテーブルに重複データも含めてすべてを追加する)、
190(複数テーブルからあるテーブルに重複データも含めて新しいテーブルを作成する)についても、
ほぼ同様です。

(>>883 へ続く)
0884デフォルトの名無しさんNGNG
(>>883 の続き)

■ 212 あるカラムにNOT NULL制約を付ける (P254)

[Jet]
構文エラーとなり保存も実行もできません。誤りではありませんか?


■ 216 あるテーブルに新しいカラムを追加する (P257)

[Jet]
「ALTER TABLE文はサポートされていない」とありますが、誤りです。(P258の記述と矛盾します。)
下記の構文で可能です。

ALTER TABLE CITY ADD COLUMN ADDRESS LONG NULL

(>>885 へ続く)
0885デフォルトの名無しさんNGNG
(>>884 の続き)

この他、解説が不足していると思われる箇所が複数。
Jet のSQLで記述が冗長、または最適ではない(不要なのにFormat関数を使用、DateSerial関数を
使用すべき局面でFormat関数を使用、など)な箇所が多数。

>>883 参照先のポインタ間違えますた。 m(_ _)m
0886デフォルトの名無しさんNGNG
SQL忘れたくないので、WindowsXP上で安くのっけることができるやつがあれば使いたいんだけど、なにかお勧めはありません
か?ExcelVBAの勉強と一緒にできたらいいかな、と思って。VBAからいろいろクエリーかけたりしたいんです。おながいします。
0887デフォルトの名無しさんNGNG
>>886

SQLite + ODBC or MySQL + ODBC がいいよ。
0888デフォルトの名無しさんNGNG
>>887
ありがと。SybaseとSunのサーバーとか自分で持てないし。早速製品をウェブで探す。ODBCはもう入ってるからね。
0889デフォルトの名無しさんNGNG
>>887
今ちょっとMySQLサイト見てみたんだけど、WindowsXPにのっているODBCじゃダメなの?ここ、自分のODBCも出してるけど。
0890879NGNG
>>880〜885
ありがとうございます!!めっちゃ嬉しいです。
早速本に書き込んでこれからの参考にさせていただきます。
なんていいスレッドだ・・・感謝
0891デフォルトの名無しさんNGNG
厨房質問ですいません。切羽詰ってます。
会社で俺はVBプログラマとして働いている。ところが、いきなり
マイクロソフト・SQLについての小さな仕事が来た。
俺は「SQL???データベースの何かでしょ?」って感じなのだが
その小さな仕事を今週中にしなくてはならない。困った・・・。
会社の人に今更聞けないし・・・。
とりあえず、SQLってのはデータベースの何チャラってのはわかった。
そこで質問。いまVBでアプリを作っていて、それは、画面で色々条件を入力したら
その条件にあった唯一のExcelシートが立ち上がるようになっている。
ほいでSQLサーバーで「テーブル」って奴を見てみると、Excelシートと同じ内容の
データが書き込まれていた。
この「テーブル」ってのはどういう役目をするんでしょ???教えてけろ。
0892891NGNG
ちなみに画面で入力して、それに対応するExcelシートってのは
ちゃんと人が一つ一つ打ち込んで作成しております。
0893デフォルトの名無しさんNGNG
テーブルとはリレーショナルデータベースでデータを格納する倉庫みたいなものです。

倉庫の名前がテーブル名
倉庫の中の品物名がフィールド名
で保存する品物がデータって感じかな。

その倉庫の中身を検索して取り出す命令がSQL。
色々な条件をつけてデータを取り出すことができます。
補足・修正?があればどなたかよろしく。
0894891NGNG
>>893
有難うございます。
もし可能でしたら教えていただけると有難いのですが・・・。
上記で私が申しましたとおり、Excelシートと全く同じデータが
テーブルに書かれておりました。
この意味は・・・?一般的に当たり前の処理なのでしょうか???

厨房ですみません・・・。田舎在住で本屋にいっても本も何も無いんです・・・。
0895デフォルトの名無しさんNGNG
>>891
知ってる範囲で答えます。ぼくも今日XPに乗るSQLに関して世話になったので。
DBサーバー
DB
テーブル
という階層をイメージしてください。
テーブルには、行と列があり、ソートしたり、検索したりできます。
で、レコードというのがあり、その中にはフィールドがあります。
ですから、Excelの階層と対比しようと思えばできますね。
どう?イメージ描けましたか?
MSSQLの仕事するんだったら、ExcelVBAを使ってクエリー(データ抽出要求みたいなもの)
をかけることばっかりだと思うんですけど、SQLっていうスクリプト言語は知ってますか?

select * from XXX.BBBB.CCCC
where
record = "some match"

なんちゃらかんちゃら、です。ぼくも8ヶ月ぐらい全く走らせていないので、かなり忘れましたけど。
0896デフォルトの名無しさんNGNG
失礼、質問内容を間違って解釈してました。
データを入力するのに、アプリでデータベースに入力してエクセルでもまた同じ内容を入力する処理が無駄では?
って質問ですか?
エクセルのファイルをどういう形で使用されるのか分かりませんが
まったく同じ内容を二度入力するのは一般的では無いですね。

また、質問を間違って解釈してる可能性あり・・・
0897891NGNG
>>896
ええと・・・VBのフォームで作った画面に条件を入力し、
間違いがなければそれに対応した唯一のExcelシートが立ち上がる、
というアプリなんです。
そのExcelシートはちゃんと人が作っているんですよ。
なのに、MS・SQLサーバのテーブルのなかにはExcelシートにあるデータが
ソックリそのまま書き込まれてるんです・・・。
・・・
これって・・・???
0898874-875NGNG
レスありがとうございました。

>>876
別に業務で困ったということでなく
自分では�@のSQLで問題ないと思っていたので
それが動かないのがどうも気になってしまったので

>>878
ありがとうございます。
いま家のoracle8iで試してみたら
教えていただいた方法で更新できました
(なぜ家のマシンにそんなものが入っているかは聞かないで)
これから。自分のSQLの問題点について考えてみます。

0899デフォルトの名無しさんNGNG
>>897
確認したいのだが、お前の見てるアプリというのはすでにあるものだよな?
ソースを読んだりできないの?

で、テーブルがなにかというと、Excelのシートの中のデータそのものだな。
アプリの仕様を書き込みから想像すると、

・人が作ったExcelをどこかにおいておく
・検索条件を入れてExcelシートを開くと、DBに中身が書き込まれる

とかじゃないかと。
何でそんなことをしてるんだとか疑問はあるが。

つーか、意味がわからんのなら恥ずかしくても回りに聞けよ。
0900デフォルトの名無しさんNGNG
>>897
本来エクセルシートとして管理しているものだが、
検索用途のためだけにすべての内容をDBに取り込んでいる
故に、897の言っているテーブルの目的は
  1、画面入力された条件にマッチするレコードを検索する。
  2、そのレコードには元のエクセルファイルのパスが含まれている。
3、エクセルファイルを開く
という事では?

はずしていたらゴメン。
0901デフォルトの名無しさんNGNG
SQLは殆どわからない初心者なのですが、何か良い本ありませんか?
0902デフォルトの名無しさんNGNG
>901
sql for smarties
0903デフォルトの名無しさんNGNG
>>901
本屋もないような僻地(離島?)に住んでいるのですね。
(ご不便なことで・・・)
0904ねこまNGNG
>902
初心者向けとは言えないと思いますが……
いつかは手に取る本といった所か
0905デフォルトの名無しさんNGNG
OracleSQLエキスパートリファレンスbyASCII
高いけど実例が多くて重宝する。
まぁOracle向けといっても普通にSQLは学べます。
0906デフォルトの名無しさんNGNG
>>901
じゃ、おいらはSOFTBANKの「SQLハンドブック」を勧めるよ。
SQL-92, Oracle, SQLServer, Accessに対応してるよ。
0907デフォルトの名無しさんNGNG
ありがとうございます。
SQLハンドブックとOracleSQLエキスパートリファレンスを注文してみました。

>>903
すみません。中身見ても良い本か悪い本かの判断が出来なかったものですから。
0908デフォルトの名無しさんNGNG
oracleでシーケンスを使って、レコードが追加されたら自動的にコード番号を
振るようにしたいんですが、やり方がわかりません。

PostgreSQLだとCREATE TABLEの時に
DEFAULT nextval('seq_code')とするとできたのですが、
oracleだと、
「ここにはプロシージャ、ファンクション、パッケージ、型は使用できません」
言われました。
プロシージャを作らないとできないのでしょうか?
0909デフォルトの名無しさんNGNG
>>908
シーケンスデータを参照し、
それを新規行の対象カラムにセットする
トリガーを作ってみれ。
0910U ◆CZtFsGiu0c NGNG
>>908
デフォルトの指定はできないけど、Insert文のvalues句に

シーケンス名.nextval

って指定するだけだよ。それでもだめ?
0911897NGNG
色々有難うございます。
今日は職場からあるサイトでSQLをしこたま勉強しました。

そこで質問。
SQLサーバのテーブルに「ヨーロッパの人口」という名前のテーブルがあったとする。
横に「イギリス、フランス・・・・」とヨーロッパの国の名前がずらりと並んで
いて(MS SQLで言えば、灰色のセル)、縦には0歳から106歳までの各年齢の人口が
それぞれ総合・男女別に入力されているとする。
そのとき、たとえばVBのアプリでこのデータをExcelに呼び出そうとした場合、
このままだと全ての国の人口が呼び出されてしまうが、VBAを使わずにSQLとVBのみで
フランスの人口のみを呼び出すことは可能でしょうか?

解りづらい説明ですがよろしくお願いします。
0912デフォルトの名無しさんNGNG
>911
select イギリス, フランス
from ヨーロッパの人口
これでイギリスとフランスの0歳から106歳までの
各年齢の人口が取得できる。
にしてもなんちゅうテーブルレイアウトやまったく。
0913デフォルトの名無しさんNGNG
>>911
分かりづらいと言うより分からねえよ。分かりたくもない気分だけど。
少なくともソフトウェアで飯食ってんならデータ構造くらいキチンと
示せるようになってくれ。 2chと言えども、それだけで質問に対する
回答の質が変わってくるぜ?

>>912
ExcelのワークシートをDBにImportする為だけのテーブルなんじゃないの?
いや、そうであって欲しいと願うばかりだけどね。
そうでなかったら終わってる・・・
0914デフォルトの名無しさんNGNG
>>911
お勧め。
「理科系の作文技術」
http://www.amazon.co.jp/exec/obidos/ASIN/4121006240/249-4320084-2130722
「日本語の作文技術」
http://www.amazon.co.jp/exec/obidos/ASIN/4022608080/ref=pd_sim_dp_2/249-4320084-2130722
0915デフォルトの名無しさんNGNG
>>912-914
小学生相手にマジレスするなよ。
0916908NGNG
>>909,910
ありがとうございます。
トリガーってまだ作ったことないので、やってみます。
当面は>>910氏の方法でやります。
0917デフォルトの名無しさんNGNG
職場から書き込む小学生がいるのか
0918デフォルトの名無しさんNGNG
>当面は>>910氏の方法でやります。

トリガーやれよ・・・
0919デフォルトの名無しさんNGNG
Table A Table Bがあり
どちらかのテーブルにデータがあればデータを取得したいのですが
どのようにしたら良いのでしょうか?
Left Join Right Join だと どちらかにあればになってしまいます
0920デフォルトの名無しさんNGNG
「どちらかのテーブルにデータがあれば」の部分が微妙です。
0921デフォルトの名無しさんNGNG
>>919
単純にUNIONじゃ駄目?
0922デフォルトの名無しさんNGNG
どちらかのテーブルにデータがあれば≠どちらかにあれば
??
多分UNIONでできると思うんだけど、質問がよく分からない。
0923デフォルトの名無しさんNGNG
FULL [OUTER] JOIN
0924デフォルトの名無しさんNGNG
919です
Full Joinで出来ました。
皆様 ありがとうございました。
0925妄想厨房(33歳、童貞)NGNG
Join (結合) に Insert(挿入) か。
SQLってエッチやね。(w
0926デフォルトの名無しさんNGNG
そう考えれば仕事も楽しいね
0927デフォルトの名無しさんNGNG
・・・。
0928デフォルトの名無しさんNGNG

>>867 >>880-885

他の出版物も内容の精度はイマイチみたい。(w

ttp://www.shuwasystem.co.jp/cgi-bin/support_sort.cgi
0929デフォルトの名無しさんNGNG
>>928

ttp://www.shuwasystem.co.jp/books/7980/0199-6/0199-6.html

著者名表記の誤りにワラタ
0930デフォルトの名無しさんNGNG
「エスキューエル」なんですか?
「シーケル」なんですか?
0931デフォルトの名無しさんNGNG
>>930
はじめにIBMで設計されたモデルが SEQUEL (シークェル) だそうだ。
その影響からか SQL (エスキューエル) のことも シークェル と
呼ぶ人がいる。・・・が、通ぶってるように見えてカッコ悪いので
普通に エスキューエル と発音することをオススメする。

シークェルなどと発音するお馬鹿さんを見かけたら、
お前、IBM の SEQUEL 使ったことあるんか、と小一時間・・・
0932デフォルトの名無しさんNGNG
Structured English QuEry Language
0933デフォルトの名無しさんNGNG
>>931
欧米では、エスキューエルでは通じないらしいですね。(どこで読んだ話か忘れたけど)
まあ、国内でしか仕事をしない人の方が多いし、外国とやりとりが発生するにしても、会話ではなく、
文書でコミュニケートすることの方が多いだろうから、問題になることは少ないと思いますが。
0934デフォルトの名無しさんNGNG
こんばんは。SQLがよくわからないので質問させていただきます。
SELECT文でデータを抽出するとき「nedan」というカラムが
100でありかつ200であるものを選択する場合
SELECT * FROM データベース名 WHERE nedan = "100" and nedan = "200"
とすると思うのですが
SELECT * FROM データベース名 WHERE nedan = "100" and "200"
のようにすることも可能でしょうか?
または別の表記方法があるのでしょうか?
わかりづらいかもしれませんがよろしくお願いします。
0935デフォルトの名無しさんNGNG
>>934
> こんばんは。SQLがよくわからないので質問させていただきます。
> SELECT文でデータを抽出するとき「nedan」というカラムが
> 100でありかつ200であるものを選択する場合

「かつ」と「または」の区別がついてないとおもわれ(w
まずは日本語の勉強をしましょう。
ちなみに解答例は
SELECT * FROM データベース名 WHERE nedan in ( '100', '200' )
とか
SELECT * FROM データベース名 WHERE nedan = '100' or nedan = '200'
ね♪(nedanが文字列型の場合)
オラクルしか知らんのだけど、"とかでくくるDBもあるんかなぁ?

0936デフォルトの名無しさんNGNG
教科書の例題を丸投げしてるっぽく感じるのは俺だけか?
0937デフォルトの名無しさんNGNG
どうでもいいが

>SELECT * FROM データベース名 WHERE ...

個人的には「FROM テーブル名」の方がしっくりくるんだが。
なんかDBのインスタンス名指定してるみたい...。
0938デフォルトの名無しさんNGNG
>>935
DBじゃ無いって話は別にして
SQL文が使えるって事で「アクセス」
0939デフォルトの名無しさんNGNG
>>934
すでに>>935氏のコメントがついているが、
左辺 = '100' であり、かつ
左辺 = '200' でもある、ということは論理的にあり得ない。

>>935
Jetでは、シングルクォート、ダブルクォートのどちらも使えます。
(Jetではなく、ミドルウェアの機能かもしれないが・・・?)
0940デフォルトの名無しさんNGNG
自分のPCにアパッチとかPHPとかSQLとか入れたんですけど、サーバーにするにはどうしたらいいのですか?すいませんアフォです。
0941デフォルトの名無しさんNGNG
>>940
(1) 書籍で調べる。
(2) WEBで調べる。
(3) お金払って業者に依頼する。

のどれか。
(環境すら書いていない質問はDQN決定)
0942935NGNG
934です。みなさん回答ありがとうございました。
今自分はデータ検索プログラミングをしているのですがどうもうまくいかなくて。
適当な検索語を入れて検索した結果からさらに別の語を追加して検索したいのですが
どうもうまいアルゴリズムがわかりません。
はじめに検索した結果をどこかに保持しておく必要があるんでしょうかねぇ。
もし手助けしていただけるのなら助言いただけないでしょうか?
スレ違いだったらごめんなさい。
0943934NGNG
あ。名前間違ってますね。
0944デフォルトの名無しさんNGNG
>>942
質問内容が漠然とし過ぎていて、

(1) 使用している開発環境(OS、開発ツール)
(2) 具体的なプログラム内容(ソースコード)
(3) 原状の問題点(どこまでできていて、どこからうまくいかないのか)

が読み取れません。
失礼ながら、ANDとORの意味すら他人に尋ねなければ理解できないようですし、
プログラミングの適性がないように見受けられます。
0945デフォルトの名無しさんNGNG
>>942
単純にJOINか二重ループで出来そうな気もするが?
質問が漠然としているなぁ
0946デフォルトの名無しさんNGNG
サーチエンジンみたいに、ある語で検索して、その結果から更に絞り込みたいって事でそ。

んじゃヒントだけ。
その処理を、コンピュータを使わずにやる時どうするか考えれ。
ハッキリしたら、プログラムなりSQLなりでそれを実現する方法を考えれ。

あと、最低限>944の指摘されてる事は書け。
0947SQL92保存会NGNG
みなさま、明けましておめでとうございます。
早速ですが、SQL Server で PostgreSQL の DISTINCT ON みたいなことを
するにはどのような SQL 文を書けばいいのでしょう?よろしくお願いします。
0948ひよこ名無しさんNGNG
現在のインスタンス以外のインスタンスの表やビューからSELECTするにはどうしたらいいですか。
たとえばCRDBインスタンスのADAMSユーザからORCLのSCOTTユーザのテーブルEMPをSELECT * したいです。

DBはOracle8iです。
0949て。 ◆qnISHi2Po. NGNG
データベースリンク作るしかないだろう

create database link unko
connect to scott identified by tiger
using '接続文字列(tnslsnr.oraで定義しれ)'

select * from EMP@unko;
0950デフォルトの名無しさんNGNG
どなたか教えてください。
全レコードで、ある一つの項目が重複しているかどうか調べるSQL、
または、重複しているレコードを表示させるSQLってあるでしょうか。

もし重複していなかったら、そのテーブル定義を作り直して
主キーにしたいのです。

どなたかよろしくお願いします。
0951デフォルトの名無しさんNGNG
>または、重複しているレコードを表示させるSQLってあるでしょうか。
ある。

>もし重複していなかったら、そのテーブル定義を作り直して
>主キーにしたいのです。

どんな状況だよ。それ。
0952デフォルトの名無しさんNGNG
タコが設計したテーブルの尻ぬぐいじゃん?
0953て。 ◆qnISHi2Po. NGNG
>>950
こんなかんじかな オラクルだけど

select
   nvl(a, 'NULLだバカ野郎')
  , count(nvl(a, 'NULLだバカ野郎'))
from unko
having count(nvl(a, 'NULLだバカ野郎')) > 1
group by a
0954て。 ◆qnISHi2Po. NGNG
▲group by a
○group by nvl(a, 'NULLだバカ野郎')
0955IP記録実験NGNG
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
0956デフォルトの名無しさんNGNG
>>315答えは出てるけど。
0957デフォルトの名無しさんNGNG
>565
もう買った。
0958IP記録実験NGNG
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
0959デフォルトの名無しさんNGNG
>>239
マイルドセブン買ってきてくれ
0960デフォルトの名無しさんNGNG
次スレ厨。
0961デフォルトの名無しさんNGNG
やっぱあれかな、こないだの埼玉の脅迫事件が決定打なんだろうか?
0962デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0963デフォルトの名無しさんNGNG
FK のはり方について教えてください。

テーブル T01, T02 があり、
この2つはスキーマが似ていますが異なります。
ただしどちらも col1 を持っているとします。

このテーブル T01, T02 に、
col1 を外部キーとして
子供として共通のテーブル X をひもづけたいのです。

ALTER TABLE [dbo].[X] ADD
  CONSTRAINT [FK_X_T01] FOREIGN KEY
  (
    [col1]
  ) REFERENCES [dbo].[T01] (
    [col1]
  ),
  CONSTRAINT [FK_X_T02] FOREIGN KEY
  (
    [col1]
  ) REFERENCES [dbo].[T02] (
    [col1]
  )

(続く)
0964デフォルトの名無しさんNGNG
しかし、実際の使用では、
「T01 と X」または「T02 と X」のように
どちらかの組でデータを入れるため
FK 違反になってしまいます。

X を X01, X02 のように2つに分ければよいのですが、
X のようなテーブルがたくさんあり、
すべてを2つのテーブルに分けなくてはなりません。

何かよい方法はありますか?

SQL Server2000 です。

0965デフォルトの名無しさんNGNG
>964
カラムを2つに分けたら?
col1_1(T01を参照)とcol1_2(T02を参照)
ともにNULL値可。
0966デフォルトの名無しさんNGNG
こんなテーブルがあったとする(名前はテーブルでいいや):

Item Object Number
---- ------ ------
Baibu Onany 10
Baibu anaru 20
Baibu oral 30
Roter Onany 5
Roter anaru 13

このときSQL文で、「BaibuのNumberのみをSumしてBaibuの行の最後に
小計を表示させ、そのItem欄には"Baibu小計"と表示させる。Roterは表示させない」
ということは可能だろうか???
Rollupでも無理のような気がしたけども・・・。
0967デフォルトの名無しさんNGNG
>>713
キタ━━━━━━(゚∀゚)━━━━━━ !!

今から幼女誘拐してくる(;´Д`)ハァハァ
0968デフォルトの名無しさんNGNG
      l、、_     _,/'}
      |ヽ''~ ̄ ̄ ̄~`ヾ
     /_,,,..   ..,,,_.`v_'`、
    /:  ━     ━   | ニ_}  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    |::    ∈∋    ヽ  | <わたしを好きなだけ殴って下さい。
  //::    -=,=.ヮ.     |ヽ、|  \
  /'../::    /∠.._     |、.ノ      ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 /':::|:::      ̄ ̄      |./
 !-'L|::.             v'
.   ヾ:::..           /
.    , ゞ、、;;;,,_,,,..._;;;;;__,,..ノ、
    'ー┐,,..、_ ノ  l_,,,...、 _,,一`
0969デフォルトの名無しさんNGNG
NULL値を含むINT型のカラムで、数字の小さい順、または大きい順に
並べ替える際にNULL値の行が先頭に来てしまいます。NULL値の行を
最後にもってきたいのですが、何か方法はないでしょうか?

そのNULL値を含むカラムとは、OUTER JOINの結合の際でできた
カラムな為、NULL値を含んでいます。

使用DBは、PostgreSQL 7.2.3です。
0970デフォルトの名無しさんNGNG
にげっと
0971デフォルトの名無しさんNGNG
>>969
ORDER BY句に
COALESCE(対象INTカラム,INTの範囲(2^32か?)までの適当なでかい数値)
でどうだ?
0972969NGNG
数値が気持ち悪かったら
COALESCE(対象INTカラム,MAX(対象INTカラム) + 1)
でもいいと思うけど。
0973デフォルトの名無しさんNGNG
2
0974デフォルトの名無しさんNGNG
↑名前間違えた
s/969/971
ダター
0975デフォルトの名無しさんNGNG
2
0976デフォルトの名無しさんNGNG
くっ、ぬかったわっ!
0977969NGNG
>>971
Thanks。
coalesce関数を初めて知ったよ。order by句で使っても
ダメだったけど、

select coalesce(対象INTカラム, 0) as number from xxx where xxx order by number

でいけたよ。
0978デフォルトの名無しさんNGNG
zakzakの見出し「ひろゆき、400万円払えるか?」
年収とかどのくらいなんだろう。そうとうケチだとは聞いてるけど。
0979デフォルトの名無しさんNGNG
>>25
さーど じゃなくて さんど だろ。
0980デフォルトの名無しさんNGNG
10秒に1コピペって・・・本当に何がやりたいんだろう。
0981デフォルトの名無しさんNGNG
winnyはまだ発展途上だからなあ、、、(スレを立ててもそれが即座に全部のパソコンに流れ
ないし、書き込みがすぐ全部のパソコンに反映されないからニュース速報には向いていない)
とりあえず今ある他掲示板のニュース関係の板を探してみる、
ニュース速報@Megabbs
http://www.megabbs.com/news/index.html
ニュース速報@MILKCAFE
http://www.milkcafe.net/news/
ニュース雑談@sub-all
http://www.bbs2.net/news23/
経済@いちごびびえす
http://matari.ichigobbs.com/economy/
まあ別に何かやばいネタを書くとか以外だったら別にIP取られても大丈夫なんだろうけど、
そういうやばいネタの中から祭りってのは発生するんだよなあ、、、
0982デフォルトの名無しさんNGNG
>966
SELECT
CASE
WHEN GROUPING(Item) = 0 AND GROUPING(Object) = 0 THEN Item
WHEN GROUPING(Item) = 0 AND GROUPING(Object) = 1 THEN Item+'小計'
WHEN GROUPING(Item) = 1 AND GROUPING(Object) = 1 THEN '中計'
END AS Item,
Object, SUM(Number) AS Number
FROM TABLE1
WHERE Item = 'BAIBU'
GROUP BY Item, Object WITH rollup
HAVING Item <> '中計'
0983982NGNG
当方SQLServer
0984デフォルトの名無しさんNGNG
oracleの外部結合がうまくいきません
失敗する条件って何かありま
0985デフォルトの名無しさんNGNG
した?
0986デフォルトの名無しさんNGNG
もうね、あまりにも言い尽くされていまさらなんだけどね。


ど う う ま く い か な い の か ち ゃ ん と 書 け ハ ゲ
0987デフォルトの名無しさんNGNG
>>986 急いでました。すみません

a.no b.no
1   4
2   5
3   6

このような二つのテーブルを結合させてSQL実行すると

select a.no,b.no
from a,b
where
a.no = b.no(+)

a.no b.no
1   null
2   null
3   null

というように表示されてしまいますです
何故でしょう?
0988デフォルトの名無しさんNGNG
>>987
正しい結果だとしか言えないんだが・・・
0989デフォルトの名無しさんNGNG
>>988
実際にはこのように表示させたいのですが・・・

a.no
1
2
3
4
5
6

どのように書けばよいのでしょう?
色々やってみましたがダメでした・・・
おねがいしますm(_ _)m
0990デフォルトの名無しさんNGNG

すてられたのか?
0991デフォルトの名無しさんNGNG
>>989
select no from a
union all
select no from b

何も考えずにこれを使え。
そしてSQL使わないプロジェクトに移してもらえ。
0992デフォルトの名無しさんNGNG
>>991
union使わないとダメですか?
外部結合でいけると思ったのですが
0993デフォルトの名無しさんNGNG
久々に2げと
0994デフォルトの名無しさんNGNG
>992
UNIONと外部結合を1から勉強しやがれこのハゲ!
それがいやなら素直に>991に従えこのハゲ!
0995デフォルトの名無しさんNGNG
っつーかそんな結合せなあかんようなDB構造の時点で終わってるなぁ。
0996デフォルトの名無しさんNGNG
ひろゆき君。
メルマガまってるよ。
0997デフォルトの名無しさんNGNG
>>689
すげー
0998デフォルトの名無しさんNGNG
SQL教えてっ!! <3>
http://pc3.2ch.net/test/read.cgi/tech/1042208762/l50
0999デフォルトの名無しさんNGNG
スレタイ一部バケた。すまん。
関連スレはとりあえず、このスレのをまず貼っておくよ。
補完はその後で・・・
1000デフォルトの名無しさんNGNG
3E8
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。