SQL教えて〜!!
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG全くのチンプンカンプンで問題の意味すらわかりません・・
門題は「単価が30000円以上で40000円以下の商品名と単価を
表示する命令」です!!これをSQL文にして欲しいのですが・・
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG来年もう一度頑張って、しっかり実力をつけなければ
学校に逝っている意味なんざねぇんだよ!
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNGもうダメ。
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG00101
NGNG私はちょー初心者で入学したからSQL言語って言われても?
って感じなんです・・・
一応、他の問題は何とかなりそうなんですけど、この問題は
ムリなんです!!
お願いします。何方かちゃんと教えて下さい!!
0011デフォルトの名無しさん
NGNGどんな教科書を使っているのか書け。
テスト前に問題がわかっているのは不思議だ。友達の答えをコピーしたほうが早いぞ。
0012デフォルトの名無しさん
NGNG遅いんだバーカ
■■■■■■■■■■■■■■■■ 終 了 ■■■■■■■■■■■■■■■■
00141
NGNGアイ・ティ・フロンティアの「データーベースソフトの活用」です。
この問題は教官オリジナルの問題なのですが、なぜこの問題が
テストの出るとわかったかと言うと、学校がドキュソなので
教官が出る問題を教えてくれたからです。
ちなみに友達も私同様、わからないみたいです・・
0015デフォルトの名無しさん
NGNG荒らしたり煽ったりしたら
プログラム板のイメージが悪くなるだろっ!
えっお前が答えろって?
僕は>>1が言ってる意味がよくわからないんで答えないんです。
0016デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGSELECT 商品名, 単価
FROM Table
WHERE (((値段)>30000 And (値段)<40000));
0019デフォルトの名無しさん
NGNG00201
NGNGありがとうございます!!助かりました〜☆
くだらない質問してすいませんでした・・
>>19
私ではありません・・
明日も違う科目のテストがあるので今日はもう寝ます。
ちなみに明日の科目は「Access」とシスアドです・・
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNGもっとネタなのかマジなのかの判断が難しいのが欲しいな
0024デフォルトの名無しさん
NGNGFROM table
WHERE 単価 BETWEEN 30000 AND 40000;
0025デフォルトの名無しさん
NGNG<= >= 使え。
0026デフォルトの名無しさん
NGNG実際、実行プラン試したら
betweenもインデックス読んでた。
ゴミン
0027デフォルトの名無しさん
NGNGなら、問題だしてやる。
じゃあ、まず手始めに
管理番号(PK)
会社コード
担当者ID
のテーブルがある。
同じ会社コードデータが2つ以上存在する
データを選択するSQLを書け。
例:
管理番号 会社コード 担当者ID
1 a1 x1
2 a1 z1
3 b1 y1
なら
管理番号 会社コード 担当者ID
1 a1 x1
2 a1 z1
と検索される。
0028デフォルトの名無しさん
NGNGじゃないか?
0029sage
NGNGん?この問題がまだ簡単すぎるのか、
それとも難しすぎたのかどっちだ?
話は変わるが、
自分で出しときながら言うのも何だが、
こういう問答は好きだな。
開発(中も後も)ユーザから色々な仕様
の検索が要求される。
SQL一発で持ってくることができれば
それだけPGMコードも簡単になる。
いつもPGMで結果セットを制御しようと
するプログラマには結構為になるスレに
なると思われ。
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNGPGMってプログラムの略? はじめてみたよ!
0032デフォルトの名無しさん
NGNG登録すれば、PDFのマニュアル一式DLできるのな〜
0033デフォルトの名無しさん
NGNGselect 管理番号,会社コード,担当者ID
from table
where 会社コード in (select 会社コード from table group by 会社コード having count(*)>1)
どうでしょう?
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNGおっ、丁度帰ろうかなと思って覗いたら、
即レスありがとう。
ネストしなくても
select *
from テーブル
group by 管理コード
having count(*) > 1
と思ってたけど(一応確認済)、
何かやばい場合あったかな?
0036デフォルトの名無しさん
NGNGgroup by 会社コード
スマソ
003733
NGNGgroup by のときは「*」使えなかったような気がしますが...
あっ。ORACLE の SQL の場合です。
0038デフォルトの名無しさん
NGNGホントだ。Oracleで試したら、そうですね。
私はT-SQL(MSSQL、Sybase)で試しました。
なので、ネストした方が汎用的ですね。
じゃ、次の問題
難易度を低くます。
問題
>>27
と同じテーブルにおいて、
管理番号(PK)
会社コード
担当者ID
現在そのテーブル情報に携わっている担当者
の数を知りたい。
もちろん、重複は1人とする。
そのSQL文を書け。
0039デフォルトの名無しさん
NGNGGROUPなしでWHEREだけで済むやん
0040デフォルトの名無しさん
NGNGSQL書く前に担当者に聞け
0041デクノボウ
NGNG1さんこれで大丈夫ですよ
0042デフォルトの名無しさん
NGNG>現在そのテーブル情報に携わっている担当者
>の数を知りたい。
悪い、書き方がまずかった
>>27
と同じテーブル
管理番号(PK)
会社コード
担当者ID
において
現在、そのテーブル情報に格納されている担当者ID
の数(重複は1つとする)を知りたい。
それでもわからん者には
例:
管理番号 会社コード 担当者ID
1 a1 x1
2 a2 x2
3 a3 x2
4 a3 x3
5 a3 x4
6 a3 x2
重複は一人とする担当者IDの数は
x1、x2、x3、x4の=4つである。
その数を抽出するSQL文を書け。
0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNGそこで、SQLを学習したいのですが、
最初は何から始めるべきですか?
0045デフォルトの名無しさん
NGNGマニュアルを読む
サンプルコードを動かして覚える
0046デフォルトの名無しさん
NGNGMS-ACCESS のクエリーが学習に向いてると思う。
クエリーの設計画面とSQL文と実行画面 を行き来できるから。
ただし、MicrosoftのSQL文法準拠だけどね。
004744
NGNGフリーの環境を教材にしたいのですが・・・。
Windows/Cygwin環境辺りで
何か良いのがありましたらお願いします。
とりあえず明日参考書を買ってきます。
0048デフォルトの名無しさん
NGNGPC UNIXは貧乏な構成なら金かからんだろ。
00491
NGNG私にはサパーリわかりません・・
テスト今日なんですけど自分で考えてみました!!
SELECT 単価
FROM 商品表
WHERE 単価 BETWEEN 30000 AND 40000
ですかぁ〜?もうわかりません・・・(涙)
午後からテストなのでまだ時間はあるのでレス下さい!!
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG正解!
しかしそれどころではなくなった。
N.YのWebサーバに繋がらない。
サーバの物理的な設置場所が日本側では
不明なので今調査中であるが、ちょっと
しゃれにならなくなっている。
(不幸中の幸いか担当範囲のN.YのDBサーバは別
だったらしく生きてた。しかしDBよりも動かす人
の方が心配だ。)
0052デフォルトの名無しさん
NGNG商品名はどこに行ったの?
0053デフォルトの名無しさん
NGNG商品表ってどこから持ってきたの?
0054デフォルトの名無しさん
NGNG回線が遮断されていただけだったらしい。
しかし明日もAM7時出勤...
ということで、新問題
以下の様なテーブルがある。
マスタテーブル
テーブル名:m
工場コード(PK)
工場名
トランザクションテーブル
テーブル名:t
年月日(PK)
工場コード(PK,FK:m1)
生産高
テーブル:tにおける工場別の
生産高総合計を表示したい。
検索項目は
<生産地コード 工場名 生産高総合計>
また、テーブルmに登録されているが、
tに存在しない工場の生産高は0として
表示したい。
表示順は工場コードについて
昇順とする。
その仕様を満たす結果を返すSQLを書け。
例
mのデータ
工場コード 工場名
a1 元町
a2 田原
a3 高岡
a4 三好
tのデータ
年月日 工場コード 生産高総合計
2001/08/01 a1 100
2001/08/01 a3 100
2001/08/02 a1 150
2001/08/02 a3 200
<検索結果>
工場コード 工場名 総生産高
a1 元町 250
a2 田原 0
a3 高岡 300
a4 三好 0
DBMSにより違ったSQLとなるので
(もちろん汎用的にも書けますが)
使用DBMSをできるだけ明記して下さい。
0055デフォルトの名無しさん
NGNGになっているが、生産高の間違い。
よって例をもう一回書くと
例
mのデータ
工場コード 工場名
a1 元町
a2 田原
a3 高岡
a4 三好
tのデータ
年月日 工場コード 生産高
2001/08/01 a1 100
2001/08/01 a3 100
2001/08/02 a1 150
2001/08/02 a3 200
<検索結果>
工場コード 工場名 生産高総合計
a1 元町 250
a2 田原 0
a3 高岡 300
a4 三好 0
ゴメソネ
0056デフォルトの名無しさん
NGNGfrom t,m
where t.工場コード=m.工場コード
group by t.工場コード
order by t.工場コード;
select m.工場コード 生産地コード,min(m.工場名) 工場名,NVL(sum(生産高),0) 生産高
from t,m
where t.工場コード(+)=m.工場コード
group by m.工場コード
order by m.工場コード;
ORACLE 未確認だよ〜ん
00571
NGNG0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG検索(表示)の指定も違ってました。
<工場コード 工場名 生産高総合計> ゴミソナサイ
>>56
レスありがとうございます。
minで工場名を一つに特定させる技もあるのですね。
m.工場名をgroup by に組み込む方法もありますね。
select m.工場コード 工場コード,m.工場名 工場名,NVL(sum(生産高),0) 生産高総合計
where t.工場コード(+) = m.工場コード
group by m.工場コード,m.工場名
order by m.工場コード;
かな。Oracle(8.15)で確認済です。
0060デフォルトの名無しさん
NGNGT-SQL (MSSQL or Sybase) の場合
(古いバージョンは使えないから気をつけて)
select m.工場コード 工場コード,m.工場名 工場名,coalesce(sum(t.生産高),0) 生産高総合計
from m,t
where m.工場コード *= t.工場コード
group by m.工場コード,m.工場名
order by m.工場コード
0061デフォルトの名無しさん
NGNGもう一つ外部結合、関数を使用しない方法
select m.工場コード 工場コード,m.工場名 工場名,sum(t.生産高) 生産高総合計
from m,t
where m.工場コード = t.工場コード
group by m.工場コード,m.工場名
UNION
select m.工場コード 工場コード,m.工場名 工場名,0 生産高総合計
from m
where not exists(
select * from s where s.工場コード = m.工場コード
)
order by 工場コード
という方法もあります。これがDBMSに依存しない方法です。
0062デフォルトの名無しさん
NGNG>SQLまわりの気の利いた入門書ってどれ?
やっぱ、各種ベンダーのマニュアル本かな。
がいしゅつだけど、Oracle,Sybaseならダウンロード
できるし。(SybaseはMSSQLほぼ(強調)互換)
あとは、こうやって、みんなといろんなケースを
遊びながら覚えていく方法が一番速いよ。
頭の体操にもなるしね。
0063デフォルトの名無しさん
NGNGスマソ sなんていうテーブルどこにもないね。
あと関数というのはDBMS依存関数のことだよ。
select m.工場コード 工場コード,m.工場名 工場名,sum(t.生産高) 生産高総合計
from m,t
where m.工場コード = t.工場コード
group by m.工場コード,m.工場名
UNION
select m.工場コード 工場コード,m.工場名 工場名,0 生産高総合計
from m
where not exists(
select * from s where t.工場コード = m.工場コード
)
order by 工場コード
これからはちゃんと校正するね。
0064デフォルトの名無しさん
NGNGこれも一種の荒らしだな。
select m.工場コード 工場コード,m.工場名 工場名,sum(t.生産高) 生産高総合計
from m,t
where m.工場コード = t.工場コード
group by m.工場コード,m.工場名
UNION
select m.工場コード 工場コード,m.工場名 工場名,0 生産高総合計
from m
where not exists(
select * from t where t.工場コード = m.工場コード
)
order by 工場コード
これが正解
0065デフォルトの名無しさん
NGNGこれは勉強になった。残念ながらもう入手困難だろうけど。
入門書とはいえないかな(w
0066デフォルトの名無しさん
NGNGm.工場コード,
Max(m.工場名) As 工場名,
Sum(IsNull(t.生産高,0)) As 生産高総合計
From m
Left Outer Join t
On m.工場コード = t.工場コード
Group By m.工場コード
Order By m.工場コード
これが、SQL-92的に正解でわ?
Oracle使いは (*) とか *= とかヤメレ。
レコード絞込みの条件と結合の条件を両方 Where句に書いて
評価順序 保証されるの?
0067デフォルトの名無しさん
NGNG006856
NGNGまあ、現時点ではSQLの方言があるので、しかたないでしょう。
>レコード絞込みの条件と結合の条件を両方 Where句に書いて
>評価順序 保証されるの?
保証されないし、順序が違っても問題ないのでは。
SQLの実行計画立てるときに、索引やデータ量によって異なる
順序で実行されるでしょうが、結果は同じでしょう。 きっと
0069Error401
NGNG同じくジョー・セルコの
『プログラマのためのSQL』
ISBN4-89471-480-9
かなり実践的な内容になっているが、最初の一冊には厳しいかも。
SQLをさわった経験のあるプログラマは必読。
0070デフォルトの名無しさん
NGNGたとえば、「生産高が 0 より大きい日のデータのみ集計する」という
条件を加えた場合 どーなるの?
Select (省略)
From m, t
Where t.生産高 > 0 And m.工場コード(+)=t.工場コード
Group By (省略)
(t.生産高 > 0) が先に評価されれば、目的通りだけど、
後ろの結合が先に評価されちゃうと、左外結合によって
できた t.工場コード == NULL というデータを持つ
レコードが t.生産高 > 0 という条件によって
切り捨てられるのでは?
「絞り込んでから結合する」のと「結合してから絞り込む」のでは
やっぱり結果が変わってくることってありますよね。
で、それらを Where句に and 使って並べて書くってことは、
評価順序が保証されてないわけだから、「絞り込んでから」なのか
「結合してから」なのかプログラマには分からんよね。
まぁ、そーいう へたれSQL書いちゃいけないっていう意見もあるけど、
書けてしまう & 予期せぬ結果をもたらす ってのは問題かと。
0071Error401
NGNG>「絞り込んでから結合する」のと「結合してから絞り込む」のでは
>やっぱり結果が変わってくることってありますよね。
うんうん。
>で、それらを Where句に and 使って並べて書くってことは、
>評価順序が保証されてないわけだから、「絞り込んでから」なのか
>「結合してから」なのかプログラマには分からんよね。
今手元に資料が無いので確認できないけど、SQL92ではちゃんと
定義されてるはず。評価順序をコントロールできる。
SELECT ...
FROM m
LEFT OUTER JOIN t
ON m.工場コード = t.工場コード
AND t.生産高 > 0
と
SELECT ...
FROM m
LEFT OUTER JOIN t
ON m.工場コード = t.工場コード
WHERE t.生産高 > 0
0072デフォルトの名無しさん
NGNG言い訳かもしれないけど、
outer joinも書こうかと思ったけど、
この問題の場合はいっしょだから書きま
せんでした。
Oracle、いつのバージョンから
SQL92の書き方がOKなった?
使えるとは知らなかったよ。
ちなみにOracleもMSSQLもSybaseも
外部結合と条件が混在した場合、
結合より前に(共に)条件が評価されます。
(11.9.3まではSybaseはSQL92の書き方は出来ない。)
でも指摘の通り、SQLからでは判別できないから
世の中はSQL92を勧めてるみたいですね。
>>71のように明確に記述できるしね。
0073デフォルトの名無しさん
NGNGテーブル :t1
id (PK)
kind (PK)
desc
がある。
kindはチェック制約により'A'、'B'
の2種類しか格納できない様になっている。
このテーブルについて、kind が'B'というレコード
について検索したいが、idについて'A'しか存在し
ないレコードの場合は'A'を表示させたい。
idについて'A'、'B'の両方の種類が存在するレコード
も存在するし、'A'のみ、'B'のみのレコードも存在する。
この仕様を満たすSQLを書け。
0074デフォルトの名無しさん
NGNGt1
id kind desc
1 A aaaa
1 B bbbb
2 A xxxx
3 A yyyy
3 B zzzz
4 B ssss
<検索結果>
id kind desc
1 B bbbb
2 A xxxx
3 B zzzz
4 B ssss
0075Error401
NGNG>Oracle、いつのバージョンから
>SQL92の書き方がOKなった?
8iまではNGでは?
9i DatabaseのWPに「ANSI準拠の結合のサポート」とあるから、これじゃないかな。
8.1.6以降は触ってないから詳しくないけど。
0076デフォルトの名無しさん
NGNGとりあえず。
SELECT id, kind, desc
FROM t1
WHERE kind = (
SELECT MAX(kind)
FROM t1 as t1x
WHERE t1.id = t1x.id)
007776
NGNG0078デフォルトの名無しさん
NGNGそだね。
ところで、desc は予約語なんだけど エスケープする方法って
SQL/99 で定義されているんでしょうか? SQL/92 には見当たらず。
ちなみに MSSQL(T-SQL)ではカギ括弧を使います。
Select [id], kind, [desc]
From t
Where kind = (
Select Max(kind)
From t As t2
Where t2.[id] = t.[id]
)
007978
NGNGあとテーブル名も t じゃなくて t1 だね。
間違いだらけでスマン。
0080Error401(=76)
NGNGダブルクォーテーションかな?
後で調べてみるね。
008156
NGNGあらまあ。確かに評価順序で結果が違いますねぇ。
なんとなく同じだと思い込んでたので、ちょっとショック。
0082デフォルトの名無しさん
NGNGSQLのコマンド名と、同じ名前のテーブル名が使用されている場合、
どうやってそのテーブル名を指定すればよいのでしょうか?
具体的にいうと、「GROUP」という名前のテーブルがあって、
SELECT * FROM GROUP ORDER BY ...
ってやりたいんですけど、構文エラーになっちゃいますよね。
あと、SQLじゃないんですけど、ユニークキーってのは
UniqueKey1とUniqueKey2がユニークキーならば
UniqueKey1とUniqueKey2が、同時に重複することは無いって事で
いいんですよね?
0083デフォルトの名無しさん
NGNG誰がそんな馬鹿なテーブル名つけたんだ(藁
0084デフォルトの名無しさん
NGNG読みやすいし、予約語ともぶつからない。
(反対する人、多いと思うけど)
008582
NGNG厨房な質問でスマソ。
0086デフォルトの名無しさん
NGNGT-SQL
0087デフォルトの名無しさん
NGNG>>82=85
>>78にも書いてるけど T-SQL ならカギ括弧付ければ逝ける。
SQL/92では定義されてないので、DBMS依存なんだと思う…。
>>80のいうダブルクォーテーションは T-SQL ではダメだった。
>>84
激しく同意。
片手に印刷した対応表( EmpCode … 社員コード, Sales … 売上 )とか
持ってる人見るととても痛い。はじめから、「社員コード」、「売上」って
列名にしとけばいいのに。
0089デフォルトの名無しさん
NGNG0090デフォルトの名無しさん
NGNG0091Error401
NGNGダブルクォーテーションは、識別子をあらわすものでした。
SQL92では、SQLキーワードを、例え区切り入りの識別子の一単語でも
(例えば、"foo table")使えないとありました。
また、将来に渡って、'_'で終わるSQLキーワードは無いので、
SQLキーワードを識別子に使いたい場合は、'_'を後ろに付けろともありました。
ま、個人的には使わないのが一番だと思うけど、あとから追加された
SQLキーワードと、以前作ったものがバッティングするという場合も
あるからね・・・。
descriptionなんか、ヤバそうだ。
0092デフォルトの名無しさん
NGNG遅レスでゴミソ
あっ、DBMSでは予約語がカラム名に
なっちゃってたね。ゴメンネ
ちなみに、
T-SQL(MSSQL、Sybase)では
SET QUOTED_IDENTIFER ON
とコマンドして設定すれば「"」を
使用でき、"group"のようなテーブル、カラム
も作れる。
でもお勧めしないけどね。
選択する時も、コマンド打って、
「"」でくくらないといけないよ。
漢字(Wバイト)の名称のことだけど、
システム関連者がすべて日本人
使用OS(文字コード)が一つ
なら問題ないと思うけど。
純日本製のDBなんてあんまりないし
(HiRDBなんてそうなのかな)
見知らぬバグが潜んでいる可能性も
無きにしもあらずだからねぇ〜。
「障らぬ神にたたりなし」のような。。。
0093デフォルトの名無しさん
NGNGDBMSでは予約語がカラム名に
なっちゃってたね。
→DBMSによっては・・・
0094デフォルトの名無しさん
NGNG余計なリスクを抱え込まないという姿勢には賛成だが
日本語 表名・項目名はすでにかなり浸透していて「見知らぬバグ」
に自分だけが遭遇する状態じゃないと思うんだけど、どう。
ずっと昔「表」という文字が含まれる表名で障害が出たことがあるので
確信はないんだけどね。
0095デフォルトの名無しさん
NGNG・・・いいスレだ
0096デフォルトの名無しさん
NGNG背景とかそゆのがわかる本きぼーんです
0097デフォルトの名無しさん
NGNG理論系かどうかはともかく
「プログラマのためのSQL」J.セルコ著
は押えておくといいんじゃないかな
0098デフォルトの名無しさん
NGNG良かった。
「"図解でわかる〜" また"猿でもわかる〜"たぐいのかよ(藁」
とか思ってた俺がアホだった。
http://www.amazon.co.jp/exec/obidos/search-handle-url/index=books-jp&field-author=%E5%B0%8F%E6%B3%89%20%E4%BF%AE/249-4535407-4869161
0099デフォルトの名無しさん
NGNGhttp://www.njg.co.jp/c/zukai.htm
0100デフォルトの名無しさん
NGNGの yyy に半角ピリオドを含む文字列を使いたいんだけど、どうしたらいいの?
0101デフォルトの名無しさん
NGNGおすすめです
「サーバのすべて」と間違えて「Linuxサーバーのすべて」を
買ってしまわないように注意
(「Linuxサーバーのすべて」と「Linuxのすべて」も違うよ)
0102デフォルトの名無しさん
NGNG見開き2ページ1項目でビジュアル解説。一般ビジネスマンから技術者まで読める実践的入門書の決定版!
【目次】
第1章 SEXとは何だろう
第2章 SEXの基本
第3章 SEXの構造
第4章 SEXの表示
第5章 SEXとリンク
第6章 SEXとプログラミング
第7章 SEXとデータベース
第8章 SEXの応用と未来
0103デフォルトの名無しさん
NGNGちゅうがくせい
発見!
寝ましょうね。明日のために
01041
NGNG私には何の事だかチンプンカンプン・・
試験は何とか不可にはならなかったので安心しているところです。
0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNGテーブルの仕様書に
住所(1),住所(2),電話番号(1),電話番号(2)
とあったので、そのまま項目名に使ったら
SQLでエラーになったしまった。()はだめだよね
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNG「Aのカラム1="0"」または「Aのカラム2="9999"」または
「Aのカラム3=Bのカラム3 かつ Aのカラム4=Bのカラム4 かつ Aのカラム5
がBのカラム5、カラム6の間」と言う条件のデータを抽出したいのですが
どのようにかけばいいのでしょうか?
0109デフォルトの名無しさん
NGNGがBのカラム5、カラム6の間」に合わないデータです。
0110デフォルトの名無しさん
NGNGa.col1 = '0' or
a.col2 = '9999' or
(
a.col3 = b.col3 and
a.col4 = b.col4 and
a.col5 between b.col5 and b.col6
)
0111厨房
NGNGが最新のもののコメントが取得したいんです。
SELECT コメント FROM 納品履歴 WHERE 商品コード='12345' AND
納品日時=(SELECT MAX(納品日時) FROM 納品履歴 WHERE 商品コード='12345' GROUP BY 商品コード)
こんなSQLを作ってみました。
これでも一応動くんですがテーブルを2回走査していてすごく無駄なような気がします
もうちょっと効率の良い書き方ってあるんでしょうか?
それともDBMSがこれくらいは最適化してくれるんでしょうか?
一応SQL-Server2000です
商品コード 納品日時 コメント
12345 2001/09/20 OKだよ
12345 2001/09/22 駄目だだめだ
12345 2001/09/23 上司に聞いてきます
12345 2001/09/24 よっしゃ
11111 2001/09/20 あいうえお
11111 2001/09/20 あああああ
22222 2001/09/21 かきくけこ
22222 2001/09/21 いいいいい
0112デフォルトの名無しさん
NGNGorder by つかえば?
0113111
NGNGたしかに取得したレコード全部使う必要はないですね。
ただソートするレコードが多いときは遅くなったりしませんか?
インデックス使えばいいんでしょうか、、、
DBMSの呼出時間を考えなければカーソルで全部のレコード見て
最大を取り出してもあまり変わらない?
0114デフォルトの名無しさん
NGNGSELECT コメント FROM 納品履歴 WHERE 商品コード='12345'
GROUP BY 商品コード HAVING 納品日時=MAX(納品日時)
ではどう?
0115111
NGNG>列 '納品履歴.コメント' は集計関数または GROUP BY 句に含まれていないので、選択リスト内では無効です。
それで試しに コメント を 納品日時 に変えてみたんですけど
こんどは下記のエラーがでてしまいました。
SELECT FROM 納品履歴 WHERE 商品コード='12345' GROUP BY 商品コード HAVING 納品日時=MAX(納品日時)
>列 '納品履歴.納品日時' は集計関数または GROUP BY 句に含まれていないので、HAVING 句内では無効です
いろいろやってみているのですが、、いまいち上手くいかないようです。
あきらめて商品コードの検索結果レコードから自分で最大日付を捜すので
我慢しようかと思えてきました、、、
0116デフォルトの名無しさん
NGNG0117デフォルトの名無しさん
NGNG先頭っていうのは確か先頭の行を取得する集合関数があったはず。
0118333
NGNG無条件に最初に引っ張ってきたレコードのみを
結果として受け取る方法はありますか?
set rowcount 1
は使ってはいけないんです。TT
0119デフォルトの名無しさん
NGNGそれなら
素直にカーソル使うしかないんじゃないかな。
なんでset rowcount使っちゃいけないの?
また0に戻せばいいじゃん。
0121333
NGNGselect top 1 〜
とすればOKになりやした。
0122デフォルトの名無しさん
NGNGセルコのは持ってる
0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNG( ´∀`)/<先生!また勉強しなおしですか?
_ / / / \___________
\⊂ノ ̄ ̄ ̄ ̄\
||\ \
||\|| ̄ ̄ ̄ ̄ ̄||
|| || ̄ ̄ ̄ ̄ ̄||
.|| ||
0125デフォルトの名無しさん
NGNG0126デフォルトの名無しさん
NGNGうん?なんだろう?
完全外部結合(full outer join)と左(右)外部結合(left, right outer join)のことかな・・・。
googleでも引っかからないなぁ・・・
どっかのベンダーの方言かな?
0127デフォルトの名無しさん
NGNG体位の事だろ
0128デフォルトの名無しさん
NGNGSELECT コメント FROM 納品履歴
WHERE 商品コード='12345'
AND 納品日時=(SELECT MAX(納品日時) FROM 納品履歴 WHERE 商品コード='12345' GROUP BY 商品コード)
より
SELECT a.コメント FROM
(SELECT コメント,納品日時
FROM 納品履歴
WHERE 商品コード='12345') a,
(SELECT MAX(納品日時) AS 納品日時
FROM 納品履歴
WHERE 商品コード='12345') b
where a.納品日時 = b.納品日時
の方が速いと思う。
でも、オレだったら挿入/更新をトリガにしたスナップショット
のテーブルを作っておくな。
ORACLEしか触った事無いんで、間違ったらスマソ
0129
NGNG技術評論社「はじめてのSQL」
0130デフォルトの名無しさん
NGNG0131デフォルトの名無しさん
NGNG0132デフォルトの名無しさん
NGNG>完全外結合って実現できているデータベース
って何ですか?
全部の項目にFKでも張ってあるってこと?
0134デフォルトの名無しさん
NGNGSQL ServerとPostgreSQLにはFULL OUTER JOINというキーワードがあるね。
SQL92準拠の振る舞いをするかどうかは知らない。
>>132
LEFT OUTER JOINとRIGHT OUTER JOINをUNIONしたようなもの。
0135132
NGNG>LEFT OUTER JOINとRIGHT OUTER JOINをUNIONしたようなもの。
ふんふん。勉強してみます。ありがとうございます!
(最後の「〜をUNIONしたようなもの。」のイメージがわかんないなー。)
0136素人
NGNG列内の年月表示が ex)1999-5-20 00:00 で記載されており
SELECT*FORM テーブル名 WHERE 年月表示=1999-5-20 00:00
又は
SELECT*FORM テーブル名 WHERE 年月表示='1999-5-20 00:00'
で抽出できません。誰かお力添えを頂きたく候。
0137デフォルトの名無しさん
NGNGPostgreSQLの場合(textは、可変長テキスト)
PostgreSQLはSQL92準拠の動きをするみたい。
create table t1 (code int, name text);
create table t2 (code int, name text);
insert into t1 values(100, 'aaa');
insert into t1 values(101, 'bbb');
insert into t2 values(100, 'ZZZ');
insert into t2 values(200, 'AAA');
insert into t2 values(201, 'BBB');
insert into t2 values(202, 'CCC');
select t1.code, t2.code, t2.name from t1 left outer join t2 on (t1.code = t2.code);
code | code | name
------+------+------
100 | 100 | ZZZ
101 | |
(2 rows)
select t1.code, t2.code, t2.name from t1 right outer join t2 on (t1.code = t2.code);
code | code | name
------+------+------
100 | 100 | ZZZ
| 200 | AAA
| 201 | BBB
| 202 | CCC
(4 rows)
select t1.code, t2.code, t2.name from t1 full outer join t2 on (t1.code = t2.code);
code | code | name
------+------+------
100 | 100 | ZZZ
101 | |
| 200 | AAA
| 201 | BBB
| 202 | CCC
(5 rows)
0138デフォルトの名無しさん
NGNG使用しているRDBMSの名称と、'年月表示'列の型を書いてくれ。
0139素人
NGNG「.」
が式の中に紛れてました。
すいません。
0140343
NGNG0141デフォルトの名無しさん
NGNG0142デフォルトの名無しさん
NGNG0143デフォルトの名無しさん
NGNG>シークェル
と言っている人は見たことがないっす。
僕は「えすきゅーえる」といってます。
0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNG<quote>
By the end of the System/R project,
IBM had implemented a language that supported System/R's
multi-table queries and multiple-user access called
the Structured English Query Language (SEQUEL).
The name later was shortened to Structured Query Language (SQL).
Today, we still pronounce the abbreviation as "sequel" because of
these early roots.
</quote>
0146デフォルトの名無しさん
NGNG所属していたE.F.コッド博士が発表した論文,"A Relational Model of Data for Large Shared Data Banks"
により原理が世に示された.同時期に概念設計されたデータベース操作言語がSEQUELである.
初めてのリレーショナルデータベースは1977年に完成したサンゼノ研究所のSystem Rで,
SEQUELのサブセットであるSQLが装備された.そうした経緯からSQLをシークウェルと読む習慣が残っている.
0147デフォルトの名無しさん
NGNG0148デフォルトの名無しさん
NGNG0149
NGNG0150
NGNG0151
NGNG0152デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNG0154シロート
NGNGまたまたお助けください。
select文で、表のカラムをbetween文のように、指定範囲で抜き出したい
のですが、FORを使って変数を与えて抜き出すことはできますか?
その場合はFOR文とselect文をどのように記載したらよいでしょうか?
0155デフォルトの名無しさん
NGNGまず、使用しているRDBの名称と、プログラミング言語を明記しよう。
それから、OSとミドルウェアを使ってるのならそれもね。
0156シロート
NGNGすいません。使用言語はJava、OSはWin系、RDBはAcsseceです。
それで、servlet内にSQLを組み込みます。
0158シロート
NGNG申し訳ありません。JDKは、1.3.02です。が、組み込む以前に、
SQLでのFOR文が良く分かりません。
単独でまず、SQL文にFOR文を利用したいのですが、SQLでのFOR文の記述は
どのようにしたら良いでしょうか?
0159デフォルトの名無しさん
NGNGでもDBはアクセスだって言ってるしな…
もう少し具体的に、というか知りたいことを限定して書いたら?
0160シロート
NGNGご指摘ありがとうございます。
下記のような感じです。
<<カラム情報の取得を動的に行いたい>>
現在
1 2 3 4 5 6 7 8 9 10・・・・・(日付)
5月あ か さ た な は ま や ら わ
6月a b c d e f g h i j
7月A B C D E F G H I J
のような表があり常にある日付より3日間のデータを取得したいのです。
ex)
5月4日ならば
4 5 6
た な は
のように、カラムを動的に指定したいです。
よろしくお願いいたします。
0161デフォルトの名無しさん
NGNGなんとなくわかった。
テーブルの定義を示してみそ。
プログラムでループしてもできるが、SQLで解決出来そうなカンジ。
0162シロート
NGNG有難うございます。が、テーブルの定義は何を書けば良いでしょうか?
テーブル名 各月データ
SQLサーバーです。
ごめんなさいよろしくお願いします。
0163デフォルトの名無しさん
NGNGおいおい、Accessじゃなかったのか?とかいう話はおいといて。
テーブルの定義は、
テーブル名:各月データ
カラム:
月 char
日 char
データ varchar
とか書けばよい。
0164シロート
NGNG早速のご返事有難うございます。神様のような方です。感激です。
テーブル名:各月データ
カラム名1:時間1.時間2.3.4.5.6.7.8.9.10.11.12…(chara型)
カラム名2:取得年月(1999-05-20 00:00:00)(chara型)
データ:例100.00 (float型)
0165デフォルトの名無しさん
NGNG簡単な例を用いて教えて下さい。
カーソル変数を引数に取るストアドの話で
その際、実パラメータ、仮パラメータが混同してしまうので、
明記して教えて欲しいです。
in,out,inoutなどのモードもよく判ってません。
お願いします.
0166デフォルトの名無しさん
NGNGテーブル構造サパーリ分からん。
>カラム名1:時間1.時間2.3.4.5.6.7.8.9.10.11.12…(chara型)
カラム名が1か?時間1...これはデータ?
カラム名2:取得年月(1999-05-20 00:00:00)(chara型)
ホントニcharか?
こりゃ>>163
大物相手だな。がむばって教育して下さい。
0167シロート
NGNGすいません。
カラム名が本当に「時間1」「時間2」……「時間31」なのです。
さらに、取得年月も同じく「chara型」です。私も泣きました。20日締めなので
一ヶ月の表示を全てワザワザcharaにしてます。
JAVAの方で変数を与え、かつそれでSQL文を囲んでループさせるのが簡単だと思
いますが……。でもそーすると、月がずれたら、さらに別のSQLを発行しなけれ
ばなりません。
何とか、「時間1」などのカラムを裏側でDATE表示に変換できればとも考えてます。
親身に有難うございます。
0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNG時間1 char
時間2 char
... char
時間31 char
取得年月日 char
データ float
という33カラムある構造なのかな?
いったい>>160の「表」はどういう風に入っているんだろう?
勘:FORループは使えないし、一つのSQLでの解決も出来ない。
多分、Java側で動的にSELECT文を組み立てて、複数回
SELECTし、Javaのロジックでデータを選択することになる。
0170デフォルトの名無しさん
NGNGカーソル変数を引数に取るストアードプロシージャの話?
それとも、カーソル定義でパラメータを使う方法?
どっち?
0171デフォルトの名無しさん
NGNGカーソル変数を引数に取るストアードプロシージャの話です。
0172シロート
NGNG凄い事を聞いて申し訳ありません。
33以上のカラムです。
学校の問題で、実際には従業員の給与を表示させている
DBのためカラム数は、約45。行数は、従業員の人数分×月数が、
永遠に続きます。ここから、指定した人のある月のDATEは簡単
に持ってこれるのですが、その部分から画面上にさらに選択した
日付け+α分をJSPに表示させます。JAVAでSQLを連発させるのは
可能か(出来る)と思いますが、SQLで解決できれば思い書き込
みました。噂で、一度SQLでその月のデータを作成し、別のSQL文
で行う(行と列の位置を入れ替える表を新規に作成しそこから抜く)
方法があると聞きましたが、その方法で可能ですか?
0173デフォルトの名無しさん
NGNGSPから動的SQLの結果をREF CURSORで戻すやりかたをおしえろよ。
ただしREF CURSOR の定義は
TYPE r IS REF CURSOR;
だからな。RETURN は付けるなよ。うひひ
0174デフォルトの名無しさん
NGNGTYPE r IS REF CURSOR RETURN table_r;
だよ。コンパイルと折らん愛飲だよ!!!
0175デフォルトの名無しさん
NGNG0176デフォルトの名無しさん
NGNGまずは、マニュアルを読め。
Oracleのマニュアルは非常に出来がいいぞ。
んで、わからないことを質問すれ。
質問が抽象的すぎるので、出てくる回答はこんなもんだろう。
0177デフォルトの名無しさん
NGNG>一度SQLでその月のデータを作成し、
というのが良くわからんけど、行と列を入れ替える方法は存在する。
select time1, data from tbl
union
select time2, data from tbl
union
...
select time31, data from tbl
とすれば良い。
が、どう考えても遅いので、すなおにJavaで複数回SELECTしたほうが
速いと思う。
正規化しなかったDB設計者を呪え。
0178デフォルトの名無しさん
NGNGテーブル構造、全然分からん。
言うことがころころ変わって、むちゃくちゃだ。
>>167の説明じゃ誰が見ても33コのカラムだと思うぜよ。
一度
カラム名:時間1 時間2 時間3 ・・・時間n 取得年月日 データ
行1: A B C ZZ 1999-05-20 00:00:00 あ
・・・
行n D V D RW 2001-10-20 00:00:00 ぴゅ
と、テーブルのカラムと行についての具体的なサンプルを表示し、
どういう条件でどのような結果を取得したいかもう一度示すべし。
>>177これは正規化以前の問題だな。
0179178
NGNG実際には45ぐらいあるってこと?
時間nのカラムは31まであり
それぞれ
取得年月日が2000-10-20ならば
時間1・・・10月20日
時間2・・・10月21日
・・・
時間31・・・11月19日
のデータということか?
0180シロート
NGNG>>179
有難うございます。そうなんです。不必要なカラムが多いので
実際に抽出するのは、45のカラムのうち33カラムです。
>>178
すいません。データ=セル内のDATAと理解してました。
カラム名
時間1……時間31 セル内の値は(100.00 float型 )
取得年月 セル内は、全て表示は 2000-10-20 00:00:00ですが文字列(chara型)です。
0181166=178=179
NGNGもういいから
select * from 各月データ の結果セット数行を
カラム名といっしょに示してくれ。
今回の33コのカラムだけでいいから。。。
折れらは表示の型なんて聞いていない。。。
あと折れの問いにも答えてくれ
時間nのカラムは31まであり
それぞれ
取得年月日が2000-10-20ならば
時間1という名のカラム・・・10月20日のfloat型データ
時間2という名のカラム・・・10月21日 ”
・・・
時間31という名のカラム・・・11月19日 ”
のデータということか?
最終的に、あんたが言う、動的にカラム数を変更したい場合は
DB鯖に投げるsql文において、select句のカラム数を
変更すればいいだけ。
実行して、格納されたResultSetのカラム数を調べて
そのカラム数分ループして
getStringでデータを取得せよ。
カラム数を調べる
int cols;
ResultSet rs = statement.executeQuery(SQL文);
ResultSetMetaData rsp = rs.getMetaData();
cols = rsp.getColumnCount();
あとは
while( rs.next() ) のループ内で
colsの数だけforで回し
getStringで値を取得すれば良い。
>本日もよろしくお願いします。
ふざけんな。
0182181
NGNGもう一度詳しく質問を書く。
各月データというテーブルの
時間nのカラムは31コあり 、
各月データテーブルのある行において、
取得年月日のデータが2000-10-20 00:00:00ならば 、
取得年月日のデータが2000-10-20 00:00:00と同行の
時間1という名のカラムのデータ・・・10月20日のfloat型データ、例:100.00
時間2という名のカラム・・・10月21日 ”
・・・
時間31という名のカラム・・・11月19日 ”
のデータということか?
これでちんぷんかんぷんの回答だったら
ネタとみなす。
0183シロート
NGNG>>182 有難うございます。
各そのとおりです。ネタではないです。
SQL SELECT * FROM テーブル名 で取得するデータ
結果
処理年月 従業員番号 時間1 時間2 〜時間30 時間31 不要なカラム×15個
2000-05-20 00:00:00 AAAAAAAAAA 100.00 100.00 〜null 100.00 %%%
2000-05-20 00:00:00 bbbbbbbbbb 100.00 100.00 〜null 100.00 %%%
2000-05-20 00:00:00 cccccccccc 100.00 100.00 〜null 100.00 %%%
2000-05-20 00:00:00 dddddddddd 100.00 100.00 〜null 100.00 %%%
∫ ∫ ∫ ∫ ∫ ∫ ∫
2001-10-20 00:00:00 cccccccccc 100.00 100.00 〜100.00 100.00 %%%
2001-10-20 00:00:00 dddddddddd 100.00 100.00 〜100.00 100.00 %%%
このようになります。
0184デフォルトの名無しさん
NGNG英単語わかれば簡単なわけよ
0185181
NGNG時間とは勤務時間のことだろ。
やりたいことは、
2000/05/25
と型が分からんが、このように
日付情報を受け取ったら、
この場合 2000/05/25から3日間
時間4・・・5/25の時間
時間5・・・5/26
時間6・・・5/27
処理年月 従業員番号 時間4 時間5 時間6
2000-05-20 AAAAAA 8.00 7.45 8.50
・・・
2000-05-20 BBBBBB 8.00 8.45 7.50
っていう様に出力したいわけだな?
だから、日付が与えられたら
カラム:時間nのnについて計算して、3日分のselectメンバカラムを
作成すれば良い。
sql = "select 処理年月,従業員番号" +
時間"+ n + ",時間"+n + 1+",時間" + n + 2+
" from テーブル where 処理年月 = '"+nengetsu+"'";
nとnengetsuは与えられた日付情報から割り出せ。
nは日にちが20以上->同月の20日との
20日より小さい ->前月の20日との
の差数(前月とは必ず日付計算)- 1(20日が1だから)
nengetsuは "yyyy-mm-20 00:00:00"というformat
の文字列に変換する。
3日間というのも動的に行いたければ
select句の時間nの生成を
forでループして生成する。
このロジックをJavaに実装する。
Javaはできるんだろ?
0186181
NGNG時間6・・・5/25の時間
時間7・・・5/26
時間8・・・5/27
処理年月 従業員番号 時間6 時間7 時間8
2000-05-20 AAAAAA 8.00 7.45 8.50
・・・
2000-05-20 BBBBBB 8.00 8.45 7.50
与えられた日付において、
n=
日にちが20以上->同月の20日との
20日より小さい ->前月の20日との
の差数(前月とは必ず日付計算)+ 1(20日が1だから)
だった。。。
0187177
NGNGお疲れ。
シロート君はわかってくれてるのかな。
前にも書いたけど、付け加えるとするなら、開始年月日と期間に
よって、必要となるレコードが1レコードか、あるいは複数レコード
になる。
この「何レコード検索しなければならないのか」というのもJava側
のロジックで組まなければならない。
0188シロート
NGNG有難うございます。
取り合えず、
int n=0;
for(n=0;n<3;n++){
db.setString_SQL("SELECT '時間"+n+"',
'時間"+n+1+"','時間"+n+2+"'from table名 テーブル where
処理年月 = '2000-05-20 00:00:00'";")
}
で一度行いその後年月を動的にしてみます。
本当に有難うございました。
0189デフォルトの名無しさん
NGNGMySQL と Perl DBI,DBD::mysql で勉強しています。
DATE型のフィールド"日付1"があって、CURDATE() がそれから
ちょうど3ヶ月、6ヶ月、9ヶ月・・・である行をSELECTしたいと思っています。
たとえば、"日付1"が2001-09-21だった時、
CURDATE() が 2001-12-21, 2002-02-21 ・・・ の時に WHERE で拾いたいのです。
何かいい方法は無いでしょうか?
0190デフォルトの名無しさん
NGNGfじゃk;あkdぁ;じmz、ぇぢj;あ
0192デフォルトの名無しさん
NGNG仕様が曖昧。
日付1が2001-01-31だった場合は?
日付1が2001-11-30だった場合は?
0193189
NGNG申し訳ありません。
それについては、ADD_DATE("2001-01-31", INTERVAL 3 MONTH) などで
出る値、つまり、2001-04-30 を想定しています。
あと、レコードに登録されている日付はCURDATE()より
前であることが保証されています。
0194189
NGNG0195186
NGNGそだね、検索開始が18日以上の場合、3日間の間に
日付について月度が繰り上がるね。
前月の末日について、30と31でMAX日数について場合分け
が必要だな。
それか、MAX日数で切れるようにするかだな。
>>188
折れは検索期間を動的に変更したい場合に、
select句の日付nについて生成するために
ループを使えと言ったのだけど。。。
クエリー全体をループさせてどうするつもりなのだ?
177同様、まぁいいか。
>>189
自分ならAP側で素直に再帰処理かけるかな。
0196デフォルトの名無しさん
NGNGMySQLは使ったことないんで書けるかどうかわからないけど、
MOD((日付1とCURDATEの差の月数),3)=0 AND
DATE_ADD(日付1,INTERVAL (日付1とCURDATEの差の月数) MONTH) = CURDATE()
みたいなのはどうだろう。
差の月数を求めるのはPERIOD_DIFFってなんかそれらしい関数を見かけたけど
結果をそのままDATE_ADDの引数にできるのかどうかはわからない。
0197デフォルトの名無しさん
NGNG0198189
NGNGありがとうございます。
日付1とCURDATEの月数差を求めるのに、
PERIOD_DIFF(DATE_FORMAT(CURDATE(),"%y%m"), DATE_FORMAT(日付1,"%y%m"))
になってしまう感じなので、かなりめんどくさいことに
なってしまいますが、それでいけそうです。
0199デフォルトの名無しさん
NGNGとかやっている箇所があるんですけど(結果の10row目から100rowだけ取り出す)、
LIMIT .. OFFSET .. は Postgres でしか使えないそうで。。
一般的にはどう書くんでしょうか?
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNG一般的な書き方はありません(出来ない)。
0202デフォルトの名無しさん
NGNGMySQLには LIMIT offset,rows っていう書き方がありますね。Sybaseにはないようだ。
大量にSELECTして10行くらいずつ表示していく場合(imodeとか)どうす
るんですかね?
0203デフォルトの名無しさん
NGNGOracleだと、
SELECT .... WHERE なんだかんだ AND ROWNUM<100 ORDER BY xx
で、なんだかんだの部分が結果の10row目になるようにする、かな。
0204デフォルトの名無しさん
NGNG>199
そんなにSQLにこだわらんでもいいような気が。
プログラムの方でカーソルで10個スキップしたのではいかんのかいな?
>202
imodeにかぎらずWebアプリだと、
大量にSELECT→小分けに表示とかやるときは
毎回ページ生成時にSQL発行するんでなくて
Cookieとかセッション使って、プログラム言語側で確保したバッファに
SELECTの結果を貯めて、そこから小出しに出すってのがよろしいのでは?
当方 VBScript(ASP) + ADO + MSSQL7 です。
皆様はこういう処理どうやってますか?
0205199
NGNGHTML内の特殊タグ内にSQL文1行だけ書いておくと、あとはフレームワークが
整形して出力してくれたりするので、できればロジック入れたくなかったので
す。
やはりあきらめてSession間で有効なオブジェクトに記憶させときます。
みなさまどうも。
0206デフォルトの名無しさん
NGNGああ、なるほど。
<!-SELECT * FROM なんとか>
とかやると勝手にテーブルにしてくれるようなヤツですな。
確かにあれは便利。
T-SQLバリバリのストアドプロシージャ作ってやるとか・・・
それにしてもページごとにSQL発行するのと
セッションオブジェクトに格納するのではどっちが重いのですかねえ。
あんまりセッションオブジェクトにデータを突っ込むと
IISのメモリ食ってしょうがないっす。
セッションオブジェクトってなかなか消滅しないもんで・・・
0207デフォルトの名無しさん
NGNGHTTPは基本的にステートレスなプロトコルだし、ダイレクトに
ページに飛んでくる場合も考えると、ページごとに検索した
ほうがいいと思う。
ページ遷移を強制して、セッションオブジェクトを使っても、
次のページにアクセスするとは限らないしね。
0208204、206
NGNGせっかくセッションオブジェクトを用意しても
次のページ見てくれないとそれが無駄になるという・・・
だいたいちゃんとログアウトする奴なんぞおらんからのお
ゴミセッションオブジェクトがどんどん増えていくという・・・鬱。
助けてガベージコレクタ!
0209ななし
NGNG取ってくる命令はないですか?
0210デフォルトの名無しさん
NGNGFROM ALL_TAB_COLUMNS A
WHERE A.TABLE_NAME='テーブル名' AND
A.OWNER='オーナー名'
で持ってこれる。
もしかしたら専用ファンクション
あるかもしれんけど、これで
ファンクションを作ってもいいと思う。
0211ななし
NGNGありがとうございます。
それで、これをVB6で使用したいと思うのですが
Public cn As New ADODB.Connection
Dim SQL as String
SQL = "select count(*) from ALL_TAB_COLUMNS A where A.TABLE_NAME = 'テーブル名'"
この後の列数取得の記述がよくわかりません。
cn.execute(SQL)とかでは取ってこれないのでしょうか?
0212VBを知らずにカキコ
NGNG列に別名を付ければ、通常の列と同じ方法で取得できる。
例えば"cnt"という名前にしたいのだったら、"as cnt"を追加する。
SQL = "select count(*) as cnt from ALL_TAB_COLUMNS A where A.TABLE_NAME = 'テーブル名'"
0213210(&その他もろもろ)
NGNGそれなら、
select(*) from テーブル where...
みたいなクエリーで
RecordsetのFieds.Countで取得できる。
どうせ、対象のテーブルnoデータ処理も
あるのだろう?
折れが書いたSQL(ALL_TABLE_COLUMNSを使用するSQL)
を使うなら、
212みたいにエリアス名でアクセスするのが最もわかりやすい
コードになるが、この場合対象フィールドが1つしかないの
は明白なので
Fields(0).Valueとフィールドインデックスでアクセスしても
いい思う。
>>212、ちなみにADOはVBだけでなくDelでも使える。
sql = "select count(*) from..."
rs.Open sql, cn, adOpenDynamic, adLockReadOnly, adCmdText
という方法もあり、こっちの方が細かな制御ができるが
set rs = cn.execute(SQL)
で支障がなければそれでかまわない。
もっと自分が最終的にしたいこと(ゴール)を
書かないと、回答がが無用になる可能性もあるから
注意しろよ。
0214ななし
NGNG・・・できたのですが、テーブルによって、なぜか
「戻り値が2倍になってしまうテーブルがあります。」
項目が10項目しかないのに20が返ってくるテーブルもあれば
ちゃんと項目数どおり返ってくるテーブルもあります。
何か書き方が悪いのかな〜??
fields(0)で取っているのですが。
0215デフォルトの名無しさん
NGNGall_tab_columns見るならownerを指定しないと。
自分のスキーマにあるテーブルならuser_tab_columnsで。
0216デフォルトの名無しさん
NGNGレコードとその合計を同時に出すクエリーって無いですか?
今のところユニオンクエリーでやってるのですが、
ほとんど同じ文を2回書くのはなんだかなぁと思いまして。
SELECT data1 AS a, data2 AS b FROM table
UNION SELECT 'SUM' AS a, SUM(data2) AS b FROM table
って感じです。
0217デフォルトの名無しさん
NGNGではいけない理由を書け。
0219デフォルトの名無しさん
NGNGたぶんそれしかないです。
>>217
そのSQLは通らない。全然違うぞ。
0220213
NGNG215も言っているが、折れもオーナ指定は
例に書いたはずだ。
>>216
T-SQL(MSSQL,Sybase)なら
SELECT data1 AS a, data2 AS b
FROM table
COMPUTE sum(data2)
で可能。
但し、結果セットが複数になるので、
ADO、DAOの場合(使用方法が異なるが)
NextRecordSetが必要となる。
JDBCはnextResultSet
尾羅来るができるかは今試せない、スマソ。
>>219
from句を含めれば、T-SQLの環境なら通る。
0221217
NGNGselect sum(data2)
の間違い(自爆)
何故一度で取らないといけないのかを聞きたかっただけ。
UNIONはソートが入るから遅い。
0222217
NGNGOracleも8iからできます。
ROLLUPとCUBEって奴。例はここ(探すの苦労した)
http://www.systech-i.co.jp/mailsrv/vol150.htm
これって使うのになんか制限あったような気がしたけど、なかったっけ?
手元にあるプロダクトでは全部動いてしまった・・・。
0223帰りたいよ〜
NGNG----------------------------------------------------------------
SELECT COUNT(*)
FROM A_Tbl
WHERE BUMON_CD NOT IN (SELECT BUMON_CD FROM B_Tbl WHERE 以下略)
A_Tblのレコード数=10とする
----------------------------------------------------------------
↑
たとえばこんな感じ
B_TblのBUMON_CDと合致しない
A_Tblの件数を取りたいのです
サブクエリの中身が有る場合は良いのですが
無い場合ちゃんと取ってこないのです
B_TblのBUMON_CDが無い場合はA_Tblの件数10件取ってきて欲しい所ですが、どうもダメみたい・・・
これをSQLだけで解決させるいい方法ってありますか?
(ループとか使わずにという意味)
文章が分かりづらかったらすいません・・・
0224デフォルトの名無しさん
NGNG0225帰りたいよ〜
NGNGオラクル8です。
書き忘れました。申し訳ない・・・
0226
NGNGMINUS集合演算子使うのがいいんじゃない?
SELECT COUNT(*)
FROM (
SELECT DISTINCT BUMON_CD FROM A_Tbl
MINUS
SELECT DISTINCT BUMON_CD FROM B_Tbl
)
こんな感じ?実際に流してないけど…
NOT IN は != に展開されちゃうんで、
サブクエリの結果がNULLだと「WHERE BUMON_CD != NULL」
に展開されて値が不正になるのが問題だと思うよ.
「WHERE BUMON_CD IS NOT NULL」に展開してほしいけど
そこまでやってくれないみたい.
0227デフォルトの名無しさん
NGNGDISTINCTがあると駄目。多分。試してないけど。
>>225
Oracleの場合は、8.1.7とか8.0.4とかまで書かないと。
0228
NGNG8.1.7で試したけどDISTINCT付けてもOKだったよ.
もっとも重複しないのであればDISTINCTいらないけど.
あと、バージョンが古いと駄目な可能性はあるな…
0229帰りたいよ〜
NGNGみなさんどうもありがとうございます。
今からやってみます。
ちなみにオラクルは8.05です。
書き忘れです。
すいません。
0230デフォルトの名無しさん
NGNGselect count(*)
from a_tbl
where
not exists (
select *
from b_tbl
where
b_tbl.bumon_cd = a_tbl.bumon_cd
)
;
0231帰りたいよ〜
NGNGワーイ!
できた!
230さんのやり方で出来ました。
ありがとうございます!
並びに助言くれた皆様ありがとうございます!
でも、帰れない。
量が多すぎる・・・
0232216です
NGNGじつはVB+ACCESSで、データグリッドに出す時に
支店1 支店2 合計
商品1 10 15 25
商品2 12 16 28
小計 22 31 53
経費(−) 5 3 8
収支 17 28 45
って感じでデータグリッドに表示させたかったからです。
帳票を印刷するだけなら分ければいいのですが・・・
実際にはクロス集計や他のテーブルから支店毎の経費をUNIONで
くっつけたりしてるので効率が悪いのは承知の上です。
Oracle使いたい・・・
他のコンポーネントを使ったほうがいいかもという気がしてきました。
0233デフォルトの名無しさん
NGNG今は自力でやっているけど、もっといいのがあればなぁ。
0234デフォルトの名無しさん
NGNGOracleでいうところのCONCATみたいなやつ。
ちなみに・・・
CONCAT('ゴラァ','ごらぁ') ってやると
ゴラァごらぁ って、出力されます。
#というか、JetのSQLリファレンスはどこに行けばあるんじゃい!!!
0235デフォルトの名無しさん
NGNG関数じゃないけど
"ゴラァ" & "ごらぁ"
でいけると思うよ。
ちなみにOracleでも俺はCONCAT関数って使ったことないな。
'ゴラァ' || 'ごらぁ'
が普通かと。
0236234
NGNGども、うまくいきました。
最初
select 列名1 & 列名2 from hoge;
って、やったら「列名1列名2」と出てきてちょっと焦ったのですが、
select [列名1] & [列名2] from hoge;
とやったら、列の内容を連結してくれたので良かったです。
#純粋な文字列ではなく、全フィールドのデータに対して
#やりたかったのです。
0237デフォルトの名無しさん
NGNG厨房
1
2
0238デフォルトの名無しさん
NGNG0239名無しさんに接続中…
NGNGカーソルをOPENした時点で結果セットに入った
件数って先にわかるんでしたっけ??
環境はOracleのPL/SQL or RDO・・・
知ってるかたがいらっしゃったら教えてください・・
宜しくお願いします。
0240デフォルトの名無しさん
NGNGPL/SQL→分からない。先に知りたければCOUNT(*)で件数を取る必要あり。
RDO→使用カーソルによる。以下ヘルプからの引用
RowCount プロパティの使い方
キーセット タイプまたは静的 rdoResultset オブジェクトが最初に作成される
場合、RowCount プロパティには次の値が設定されます。
行が返される場合は結果セット内の行数。
クエリーから行が返されない場合は 0。
RowCount プロパティを使用できない場合は -1。
コードで RowCount プロパティを参照すると、rdoResultset オブジェクトに
完全にデータが取得されてから、アプリケーションに制御が戻ります。
動的カーソルの場合は、行数が変化するので、RowCount プロパティを使用でき
ません。また、前方スクロール タイプの結果セットの場合は、一度に公開され
る行は 1 行だけなので、同様に RowCount プロパティを使用できません。
0241240
NGNG解説
rdoResultset オブジェクト内でアクセスされた行数を検出する場合、
または rdoResultset が行を返したかどうかを判定する場合は、RowCount
プロパティを使用します。RowCount プロパティは、すべての行がアクセス
されるまでは、クエリーで返される rdoResultset オブジェクトの行数を
表していません。すべての行がアクセスされた後で初めて、RowCount
プロパティは rdoResultset オブジェクト内の総行数を表すようになります。
RowCount プロパティを参照すると、MoveLast メソッドを実行した場合と同
じように、RDO は結果セット全体を取り出します。
ドライバおよびデータ ソースによっては、行数を取得できないことを示す-1、
または rdoResultset オブジェクトが行を返さなかったことを示す 0 が、
RowCount プロパティから返る場合があります。ドライバが行数を返せる場合、
RowCount プロパティは rdoResultset オブジェクト内の行数を返します。
rdoResultset オブジェクトに対して Requery メソッドを呼び出すと、
クエリーが最初に実行される場合と同様に、RowCount プロパティは再設定さ
れます。
0242デフォルトの名無しさん
NGNG置かれています。
具体的には
a_table (id INT, name VARCHAR(100), kingaku INT) と
b_table (id INT, name VARCHAR(100), kingaku INT) があるという、
悲惨な状態です。
が、2つのテーブルの全ロウを眺めてみると、idはまったく重なっていないようです。
この2つのテーブルが、 さも一つのテーブルであるかのように扱って SELECT する
ことはできないでしょうか? WHERE kingaku < 1000000 の先頭100ロウを取り
出す、などの処理がしたいので、a_table, b_table 別々にクエリする方式では
やや面倒が多いのです。。。。
よろしくお願いします。DBMSはMySQLです。
0243デフォルトの名無しさん
NGNGMySQL って UNION 演算子は使えるの?
0244デフォルトの名無しさん
NGNG使えないようです
0246デフォルトの名無しさん
NGNGなるほど・・
ちなみに、UNION演算子が使用できる場合はどのようになるのでしょうか?
後学のため、教えていただけませんか?
0247デフォルトの名無しさん
NGNGMySQLは知りませんが、PostgreSQLならテーブル t1 が
a b
---
1 1
2 2
で、テーブルt2 が
a b
---
3 3
4 4
のとき
select * from t1 union select * from t2
を実行すると
a b
---
1 1
2 2
3 3
4 4
となります。
0248デフォルトの名無しさん
NGNG242みたいな条件なら
SELECT * FROM a_table UNION SELECT * FROM b_table
でqueryの和が取れる。WHERE kingaku < 1000000の先頭100行取りたいなら、
副問い合わせにして
SELECT * FROM
(SELECT * FROM a_table UNION SELECT * FROM b_table) AS union_table
WHERE kingaku < 1000000 LIMIT 100;
みたいな感じで使う。副問い合わせをVIEW(これもMySQLにはないんだっけ)にして
CREATE VIEW union_table AS SELECT * FROM a_table UNION SELECT * FROM b_table;
SELECT * FROM union_table WHERE...;
こうした方が楽かも。
0249デフォルトの名無しさん
NGNGどうもありがとうございました。勉強になりました。
0250デフォルトの名無しさん
NGNGsybase11.0.3
ある1つのテーブルの重複行を削除するSQL文が分からないので教えてください。
具体的には下記の処理がしたいのです。
tableABC
----------
colA colB
----------
10 AAA
10 XXX
20 BBB
30 CCC
30 YYY
30 ZZZ
40 DDD
↓
tableABC
----------
colA colB
----------
10 AAA
20 BBB
30 YYY
40 DDD
0251250
NGNGの結果のようなテーブルに修正したいのです。
colAの値が重複している部分を削除して1行にしたいのです。
しかし、colBの値は気にしません。
0252デフォルトの名無しさん
NGNG0253250
NGNG郵○省の7桁郵便番号データなのですが…。
0254iku
NGNGデータを処理した日付をUDATEというフィールドへ下記の様に
入れてあげたいのですが
上手くいかないんです。
どうやれば上手くその日の日付がフィールドに更新されるのか
教えて下さい。(T□T)
strSQL = "UPDATE D_PSMAN ";
strSQL += "SET UDATE = 'Date(),";
0255252
NGNGみたことあるわ。
役人の作ったもんなんて、そんなもんだったよな。
テーブルにつっこむ前にperlかなにかで処理してあげるか、
カーソルループでも作ってうまく処理してやれ。
0256253
NGNGその方法わかりません。。ポインタだけでもお願いします。。
0257デフォルトの名無しさん
NGNGSQL一発では無理でしょう。ストアドプロシージャでも作るしかない
んじゃないか?
0258デフォルトの名無しさん
NGNGOracle/SQL Serverむけのなら、書こうと思えば書けるよ。
どっちかというとSQL Serverのと煮てるんだっけ?
0259256
NGNGはい。SQL Server系です。
といいますか、SQL Serverがsybase系です。。
0260257
NGNGDELETE FROM tableABC
WHERE tableABC.colB NOT IN (
SELECT MIN(y.colB) FROM tableABC AS y WHERE y.colA = tableABC.colA
)
(別板にてご教授いただきました…)
0261260
NGNG誤 - 257
正 - 259
0262デフォルトの名無しさん
NGNG大体あってるが、NULLの含まれるレコードに注意しな。
NULLを許していないならOK、気にしないでくれ。
0263デフォルトの名無しさん
NGNGネタ?
0265デフォルトの名無しさん
NGNG0267iku
NGNG環境はWindows2000proでSQLServer7.0です。
265>>SYSDATEですか?
今まで汎用機の開発でしたので初めて知り,
調べてみました。
下記で上手くいきそうです。
ありがとうございます。
SYSDATE 今の日付
ADD_MONTHS(sysdate, 4) sysdateから4ヶ月後(-をつけると前になる)
LAST_DAY(sysdate) sysdateの最後の日付
NEXT_DAY(sysdate, '木曜日') sysdateの次の木曜日
MONTHS_BETWEEN(sysdate, sysdate-400) sysdateからsysdate-400までの月数
0268デフォルトの名無しさん
NGNGoracleではそうだけどSQL Serverにはsysdateは無いんじゃないか?
SQL Serverだとgetdate()だったと思う。
システム日付から4ヵ月後だと
select dateadd(mm, 4, getdate())
0269この場合?
NGNG以下のようにデータが入っています。
1、3、4、5、9、10、13・・・(つまり連番でないという事を言いたい)
このテーブルから、monarを小さい順に並べたときの3個目から5個目までを
取り出したい。(4,5,9を取り出す)
この場合、サブクエリー使ったら結構時間かかるんですけど、もっと
いい方法はないのだろうか?Oracleなら便利な関数がありそうだが・・・?
0270デフォルトの名無しさん
NGNGselect monar from (select monar from Neko order by monar) where rounum between 3 and 5;
0271この場合?
NGNG誤解表現すんまそ。SQL-SERVER 7.0なんです。
0272デフォルトの名無しさん
NGNGindexは貼ってあるのか?
0273この場合?
NGNG0274デフォルトの名無しさん
NGNGselect top 3 monar from
(select top 5 monar from Neko order by monar asc)
order by monar desc
0275デフォルトの名無しさん
NGNG俺は「張る」。
0276貼る
NGNGselect datepart(hour, 日時) as A, count(*)
from テスト
group by A
だと、列名 'A' は無効です。と叱られます。
group by にはいちいちdatepart(hour, 日時)と指定する必要が
あるのでしょうか?
0277張る
NGNG0278デフォルトの名無しさん
NGNG0279貼る
NGNG実はGROUP BY 1は怒られます。ORDER BY 1は怒られないのです。
いけてねーDBだよ・・・
0280初心者
NGNGid フィールドA フィールドB
1 100 100
2 200 500
3 300 700
このテーブルからフィールドBの値がフィールドA
の値の2倍以上のレコードを抽出したいのです。
つまりこのテーブルの場合2,3が抽出されます。
この場合SQL分は
select id from T_nedan where フィールドB > フィールドA*2
でいいんでしょうか?どうしてかうまくいかないのです。
初歩的なことでもうしわけありません。
0281デフォルトの名無しさん
NGNGテーブル見てるとそうじゃないようだが。
0282yayoi
NGNG予約管理表を作成するために、
スケジュールテーブルに顧客テーブルから顧客名を付加して
まるで一つの表のようにしたいです。
どのようにSQLを組めば良いのでしょうか?
スケジュールテーブルには
時間、レコード状態、顧客IDなどがあり、
顧客テーブルには
顧客ID、顧客名、住所などがあります。
0283デフォルトの名無しさん
NGNG顧客テーブルはマスタテーブルとし、顧客IDがそのテーブルの
主キーだと仮定したとして。
SELECT b.顧客ID,b.顧客名,b.住所,a.時間,a.レコード状態
FROM
(select * from スケジュールテーブル) a,
(select * from 顧客テーブル) a
where b.顧客ID = a.顧客ID
でいいんじゃないの?
0284デフォルトの名無しさん
NGNGSELECT b.顧客ID,b.顧客名,b.住所,a.時間,a.レコード状態
FROM
スケジュールテーブル a, 顧客テーブル b
where b.顧客ID = a.顧客ID
じゃいかんのか?
0285デフォルトの名無しさん
NGNGIDのような行番号をあらわすフィールドは無いものとして。
0286デフォルトの名無しさん
NGNG0287デフォルトの名無しさん
NGNGSQLとしては、激しく既出で基本中の基本です。
0288デフォルトの名無しさん
NGNG0289デフォルトの名無しさん
NGNGできません(きっぱり)。
先頭の*レコードを取得、というのなら、実装しているDBもありますが。
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNGなんか自身たっぷりだし(ワラ
0292デフォルトの名無しさん
NGNG乗り換えてみてはいかがでしょうか
0293デフォルトの名無しさん
NGNG0294デフォルトの名無しさん
NGNGこれ(>274)じゃ駄目なのか?
0295デフォルトの名無しさん
NGNGいちおヒント。
あるフィールドの値を基準に順位付けして連番を振るという方法は知ってるよな?
(知らんなら検索して探して。いっぱい転がっているから。)
んで、連番さえ振ってしまえば後は...
0296デフォルトの名無しさん
NGNG0297みか
NGNGその中の1件だけUPDATEしたいのですが、どうすればよいですか?
これわからないと、明日も残業なんです〜。
0298高校生
NGNG0299デフォルトの名無しさん
NGNG>テーブルにまったく同じデータが複数件あって、
>その中の1件だけUPDATEしたいのですが
ORACLEだったらROWID指定すればいいんじゃない。
0300デフォルトの名無しさん
NGNG単なる一時テーブルだったらまだ許せるが...
0301デフォルトの名無しさん
NGNGカーソルを使えば
0302デフォルトの名無しさん
NGNGdelete from テーブル名 where current of カーソル名;
これでできるかな
0303みか
NGNG>>300そうなんです。私もおかしいと思うのですが、全体的に把握してるわけでもなく
リーダーに言われるがままに(仕様通りに)とりあえずやってるだけなんです。
>>301 >>302アドバイスありがとうございました!
で、結局レスを見る前に適当にやってしまいました。結果は、
SP内でまず、
1.対象のレコードを変数に格納。
2.対象レコード数のカウント。
3.対象レコード全件削除。
4.変数より[カウント−1]分をインサート。
5.更新分(一件)をインサート。
...ややこしいですね...スミマセン、ださくて...
私みたいなのがプログラマーと名乗るのもおこがましいことは重々承知
しております。レスくださった皆様ありがとうございました。
もっと勉強してきます。また教えてください!
0304デフォルトの名無しさん
NGNG再installして、でimportするのに
bcpっていうコマンドがあるよと聞いたのですが、
使い方が分からずで、
bcpって言うコマンドの使い方教えてください。
0305デフォルトの名無しさん
NGNG0306名無しさん@XEmacs
NGNGなんで人工キーつかわねぇんだ?
とか愚痴ってみる。
0307(0^〜^0O))^▽^(
NGNG他スレでも、聞いたロー?
漏れが答えてやったから見に行って来い
0308(0^〜^0O))^▽^(</b></font>
NGNG0309(0^〜^0O))^▽^(
NGNG0310307
NGNG真似して荒らすな!!
0311デフォルトの名無しさん
NGNG学んだ方がいいと思いますか?家ではオラクルやSQLサーバー(個人で買うには高
い)がないので、実習ができないし・・・。
それとSQLって将来大丈夫ですか?
COBOLみたいになったらちょっと・・・・
0312仕様書無しさん
NGNG取り合えず本買ってフリーのDB叩いてみれば
0313デフォルトの名無しさん
NGNGWindows使ってる?
ならば、MySQL for Win32がおすすめかも。
http://www.mysql.org
から、本体をゲト。
で、
http://www.hi-ho.ne.jp/tsumiki/
http://sql.jnts.ne.jp/
から、便利なツールをゲト。
PostgreSQL for Win32もあるんだけど、こちらは
Win環境ではまだまだって感じ。
MySQL-Max使えばトランザクションも使えるから、おすすめだ。
0314デフォルトの名無しさん
NGNGSQL学ぶなら、
http://www.rfs.co.jp/sitebuilder/sql/index.html
http://www.ann.hi-ho.ne.jp/hirok/sql/
http://www.kozupon.com/sql/sql1.html
http://www.cskkansai.co.jp/drool/ogawa/01sql.html
http://www.wakhok.ac.jp/DB/DB.html
あたりを参考に独学すれば?学校で学んでも、大したスキルは付かないと思う。
自分であれこれいじって苦労してものは、財産になるぞ。
SQLの将来ねぇ。当分は存続していくと思うけど、今後は、SQLは隠蔽されて、
オブジェクトにマッピングされたRDBを使ったりしていくような方向になるんじゃないかな。
この点、アポーのWebObjectsに含まれてるEnterprise Object Framework(EOF)ってやつは
10年くらい前から、SQLを意識させないRDBアクセスを実現してる。
ここ数年流行りのEJBなんかよりもはるかに洗練されてて効率高いぞ。
興味あったら検索してみな。
とはいえ、SQLを知っていると知っていないとでは、大違いだと思うから、やっといて損はない。
0315デフォルトの名無しさん
NGNGSEの方が言ってましたよ
Data BaseについてのHP造ってしまいました
http://users.goo.ne.jp/rdbms
0316デフォルトの名無しさん
NGNGそのSE、たぶんクソSEだ。
単一のベンダーを拠り所とするヤツって、思想的にダメ。
0317デフォルトの名無しさん
NGNGWebObjectsとRDBの連携って、どうなってんの?
SQLは書かないのか?
きょうびJDBC経由だったら、resultset作ってSQLぶん投げてるだろ。
つーかそれが普通。EJBだって結局はSQL書いてるよ。
0319デフォルトの名無しさん
NGNGForte for java 3.0 CEとか入れるとPointBaseの機能限定版がついてくる。
SQLのドキュメント(英語)もついてきて、Javaとセットで勉強できるよ。
Javaいらん・・・?それはスマソ。
0320314
NGNGWebObjectsは、基本的にJDBC2.0準拠のドバイラ経由でRDBとやりとりをするぞ。
RDBのスキーマ情報を、リレーション含めてJavaのオブジェクト化するフレームワーク(EOF)がある。
で、そのフレームワークがSQLを生成して実際にRDBとやりとりをするが、開発者は基本的に
SQLを書く必要は無いのだ。ぜんぶJavaのメソッドを叩くことでRDBとやりとりできる。
んで、Webアプリなんかは、動的にWebのUIを生成する部分も全部ビジュアルに作れて、
なおかつRDBから取得したデータをWebに出力する場合の作業も、これらのメソッドや
フレームワークが提供するオブジェクトをビジュアルにUIに対して接続するツ-ルがあるから、
MS-ASPやColdFusion、JSP、Perl、PHPなんかでよく見られるSQLをUIやロジック中に
シコシコと入れなきゃいけない作業から、ほぼ完全に解放されるぞ。
もちろん、パフォチュー絡みで生SQL書きたい場合やストアドプロシジャ使いたい場合、これも可能。
EOFがRDBに投げているSQLも確認できるから、
「SQLありき」でアプリを構築するとゆーナンセンスなやりかたではなく、
「目的ありき」でアプリを構築して、結果として生成されてるSQLを見られるので、
そういう視点からのSQLの勉強にはいいかもしれない。
なにせ、EOF自体は10年以上前から存在する技術だから、枯れてていい感じ。
0321デフォルトの名無しさん
NGNG0322デフォルトの名無しさん
NGNG------------
1 | A | a
2 | B | b
3 | C | c
4 | D | d
5 | E | e
こういうテーブルから
foo | bar
----------
A | b
B | c
C | d
D | e
というデータを取り出すにはどのようにやればよいのでしょうか?
要はfoo列とbar列を1つずらしたいのですが。
ちなみに id はユニークです。
0323山神>322
NGNGFROM Table1, Table1 AS Table1_1
WHERE Table1_1.Foo = (select Min(Foo) from Table1 as Table1_2 where Table1_2.Foo > Table1.Foo)
0324322
NGNGありがとうございます。
でもこれはfooがソートされていないと駄目なんですね。
fooもbarも特にソートされていない場合によい方法はないでしょうか?
それとfoo列とbar列を1つではなく2つ以上ずらすことも可能なものをできればお願い致します。
0325デフォルトの名無しさん
NGNG適材適所でしょ。
扱うデータが少なければオブジェクトも良し。
0326デフォルトの名無しさん
NGNGやりたい意味がよくわからんが、どうしてそんなことしたいの?
普通に全部取り出して、ロジックで処理したらだめなの?
SQLでは、シーケンスが保証されていないRDBMSを前提にしているから
基本的に「順番」という概念はない。
RDBMSに依存してもいいなら、出きるかもしれない。(出来ないかもしれない)
0327326
NGNG0328デフォルトの名無しさん
NGNGSELECT A.FOO, B.BAR
FROM TABLE1 AS A, TABLE1 AS B
WHERE A.ID = B.ID - 1;
0330&rle
NGNG0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNGsp_columns<綴りあってるか?
0333デフォルトの名無しさん
NGNG0335デフォルトの名無しさん
NGNGそれが英語圏の人間の奢りだというのに気づかないのか。
数式も読めないアフォ米国人のためになんで俺らがいらん苦労せにゃいかんのだ。
0336デフォルトの名無しさん
NGNGなら何故にEnglishQueryなんてツールがあるのだろうか?
0337デフォルトの名無しさん
NGNGselect m.Name t.View from message AS m, thread AS t order by t.moddate desc
この message AS m って部分は何でしょうか?
m というテーブルは入ってませんです。
0338デフォルトの名無しさん
NGNG0339デフォルトの名無しさん
NGNGなんで別名なんて付けるんですか?
長い名前を何度も書かなくても済むようにですかね?
0340デフォルトの名無しさん
NGNGだいたいそんなかんじ。
項目名がダブってたりした時とかいろいろ有り難い。
0341デフォルトの名無しさん
NGNG通じない人が多いんだよなあ。
0342デフォルトの名無しさん
NGNG0343デフォルトの名無しさん
NGNG同じテーブル同士をJOINするときには、別名が必要。
0344デフォルトの名無しさん
NGNGスクール水着
0345デフォルトの名無しさん
NGNGみたいな形式でselectするたびに結果に連番を振る方法はあるでしょうか?
(結果を取得する際にrenbanに1番目の場合は1,2番目なら2が入る。
renbanという列は存在しないものとする。)
sqlserverです。
0346デフォルトの名無しさん
NGNG何が必要なのでしょう?
Access2000(ADP作成時)とかVB6.0からだと
「そんな古いデータは使えねぇ。あきらめな」
ってなメッセージが出てきて難儀しております。
0347デフォルトの名無しさん
NGNGそんな古いデータは使えねぇ。あきらめな
0348デフォルトの名無しさん
NGNGつぅかミドルは何よ?ADO?
データが有るって事は既存システム?
0350デフォルトの名無しさん
NGNGORACLEでいったら、rownum見たいなもんね! わしも知りたい
いつも一度ワークテーブルに
シーケンスを付けてやってる
結構面倒だ
0351デフォルトの名無しさん
NGNGあんたすごいよ。
ためしにrownum使ったら連番が振られたよ。
ありがとね。
以前、順序.nextval を埋め込む方法を取ろうとしたけど、初期化が面倒でやめた。
0352351
NGNG0353デフォルトの名無しさん
NGNGhttp://www.interq.or.jp/www-user/kanki/dbfaq01.htm
0354デフォルトの名無しさん
NGNGなんかRDBの使い方間違ってないか?
こんな場合があるから要るんだっていう実例きぼんぬ
0355デフォルトの名無しさん
NGNG「2ページの上から8番目の明細ですが・・・」っていうよりわかりやすいのは確か。
0356デフォルトの名無しさん
NGNGWEB関係でもありがち、一度に全行表示すると時間がかかるので
最新の1〜10行目を表示
次へのボタンで、11〜20行目を表示かな
0357デフォルトの名無しさん
NGNGSELECTだけでデータを取ってこれて、それを貼っつけるだけで
アウトプットを作れてしまうようなものがあるよね。
例えばACCESSでクエリーをデータソースにしたレポートとか。
で、そのレポートに「行に連番つけてくれ」って言われたとき、
SQLだけで対応できたら楽かもしれない。
ACCESSの例だとロジック書いて連番振る事は一応可能だけど
結構制御が面倒だし。
0358デフォルトの名無しさん
NGNGまあ正直、「それSQLの役割か?プレゼンテーション側でできるべきだろ」
って思うケースもあるのは確かだね。
0359デフォルトの名無しさん
NGNG0360デフォルトの名無しさん
NGNGPostgreSQLならoffsetとlimitで簡単指定。
なので、行番号はいらん。(行番号振りたいって話ならどうしょうもないが)
0361デフォルトの名無しさん
NGNG「PostgreSQLなら」ってのは、いろんなDBMSがあるんだから
少なくともISOの規格では無いと思ってたが
0362デフォルトの名無しさん
NGNG客が「SQLで連番振りたい!」というのか?(藁
0363デフォルトの名無しさん
NGNG要望が絶対無いと言い切れるか?
「連番なんか要らないじゃ無いですかぁ」言うのは簡単だけど
「出来ない」と「知らない」は違うぞ!
客から要望でなくても、
知ってることで処理を簡単に出来ることも多々あるし
0364デフォルトの名無しさん
NGNG問題はそれをSQLだけですべきかどうかだな。
連番くらいならとってきた後振ったほうが処理はわかりやすいと思うぞ。
0365デフォルトの名無しさん
NGNGだからロジックで埋め込めない場合もあるでしょ!
特に帳票系などレコードセットとかに入れたらOKなときとか
それでも後で付ければ良いジャンって思うかも知れないが
100万件ぐらい連番ふってみ、それなりに時間かかるっしょ
連番がどうとかを言いたいわけでは無く
SQLでもプログラムでも同じ事が出来るのなら
速くしたほうが良いでしょ
0366デフォルトの名無しさん
NGNG0367デフォルトの名無しさん
NGNGそれじゃいかんのかい?
0368デフォルトの名無しさん
NGNGこれは遅いですね!
まだワークテーブルに入れた方が速い
0369デフォルトの名無しさん
NGNG割と昔から知られてる手法だけど、実際に使ってるケースは
どれくらいあるだろう。
自分自身を直積するような方法は、データ量の2乗に比例して
時間がかかるようになるのは当然だよね。1000件に連番振る
のに100万件のオーダーで処理するわけだ。
SQLの考え方としては参考になると思うけど、実務で使うと
えらい事になるかもしれない。
0370山神
NGNGaccessのレポート限定ならrunningSumプロパティを
使えばコードは不要ですが。
>>369
SQLで自己結合を取る方法なら
計算量は
ο(N**2)
にならざるをえないですね。
だから出力側でなんとかするのが本線かと思う。
0371デフォルトの名無しさん
NGNGってレス遅すぎ
ところでSQLの仕様ってみんなどうやって確認してる?
0372デフォルトの名無しさん
NGNGそれは知ってるけど、MSのSQLServerの講習会行くと
アメリカ人講師はシィクルサーバと発音してるよ
0373371
NGNGそれにしても仕様書…JISから買わなきゃだめなんかな
ってJISのサイト見たことないんだけど←だめだめですか?
0374デフォルトの名無しさん
NGNG0375デフォルトの名無しさん
NGNGえいちてぃーえむえるのほうがはつおんがむずかしい。。。
0376デフォルトの名無しさん
NGNG新しいデータの生成はできますか?
a1 aaaaa1
a2 aaaaa2
a3 aaaaa3
を元にして、
b1 aaaaa1
b2 aaaaa2
b3 aaaaa3
を同じテーブル内にInsertしたいんですが。
0377デフォルトの名無しさん
NGNGinsert into tbl ( ... ) select ... from tbl;
0379デフォルトの名無しさん
NGNGC1|C2
-----
30|AA
40|BB
50|CC
TableB
C3|C4|C5
--------
30|10|aa
30|20|bb
30|30|cc
30|40|dd
50|30|ee
50|50|ff
から
C1|C2|C5
--------
30|AA|dd
40|BB|(Null)
50|CC|ff
を取り出すSQLって書けますか?
C1=C3で、C4の値が一番大きいレコードのC5を取り出す。
クエリーのレコード数=TableAのレコード数。
てのが条件です。
色々試したのですが出来なくて・・・。
教えて君でスミマセン。
0380デフォルトの名無しさん
NGNG(
select C1, max(C4) C4 from TableA a, TableB b
where a.C1 = b.C1
group by a.C1
) c, TableA a, TableB b
where a.C1 (+)= c.C1
and b.C1 (+)= c.C1
ORACLEの場合っすけど
こんな感じでいかへん?
0381デフォルトの名無しさん
NGNG(+)ってなんですか?
0382デフォルトの名無しさん
NGNG外部結合演算子。Oracleのローカルルール。
Oracleは、外部結合の構文で標準SQLをサポートしてないのです。
OracleのSQLの仕様決めてる奴、死んで欲しいです。
0383デフォルトの名無しさん
NGNG普通の'='じゃだめなんですか?
0384デフォルトの名無しさん
NGNG>>380のサブクエリーと関係ありますか?
0385380
NGNGとりあえずツッコミですが
ISOの書き方もサポートしてるはずです
OUTER JOINくらい知ってますがな
普段使い慣れてないので資料見ないと
構文をしっかり憶えてないだけ
ちゅーか批判するなら標準で書き直せちゅーねん
>>384
外部結合から勉強しましょうね!
例から説明すると
40|BB|(Null)
があるから外部結合にしてみました
0386デフォルトの名無しさん
NGNGぎゃくに標準のSQLしか使えないDBMSって...(w
0387379
NGNGWhere句で副問い合わせできるのは教わってましたが
From句でできるのは知りませんでした。
そこに考えがいかなかった自分に鬱。
>>380さん、マジでありがとうございました!!
これで今まで33秒かかってた処理が14秒になりました。
それとプログラムもいじって4秒まで短縮。感動!
でもこういうのって評価には結びつかないんですよね。
自己満足にしかならないのがチョト悲しい。
外部結合はOUTER JOIN使うとなぜかエラーになっちゃいます。
書き方がいけないのかな?(+)使えるからいいんですが。
でも(+)って書き方の方が直感的だし、見た目もすっきりするから
いいですよねー。
0388デフォルトの名無しさん
NGNGselect * from a,b where a.no=b.no
って書くのはJOINじゃないの?
なんかわけわかんねぇこと書いてます?俺。
なんかもう泣きそうだよ。
0389デフォルトの名無しさん
NGNGテーブル2のpointをid毎に合計して、
テーブル1のpointにid別に足すというのを
一回のSQLでやりたいのですができますか?
「テーブル1」
id,name,point
aaa,田中,100
bbb,鈴木,200
ccc,山本,300
「テーブル2」
id,point
aaa,50
bbb,100
ccc,70
bbb,50
aaa,25
0390379
NGNG>>379の例で言うと、TableBにC3=40のレコードが無いため
ただのイコールだと結果は
C1|C2|C5
--------
30|AA|dd
50|CC|ff
となってしまいます。
レコード数=TableAのレコード数という条件なのでこれではだめです。
TableBに該当データが無くても、TableAのデータは得られるように
JOINとか(+)を使ってるわけです。
0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNGORACLE限定だけどこれでいくと思う
SELECT a.id,a.name,a.point + NVL(b.point,0)
FROM
(SELECT id,sum(point) sd point from テーブル2 group by id) b,
テーブル1 a
Where a.id = b.id(+)
ただし、テーブル1のidはユニークとする。
0393389
NGNGレスありがとうございます。
オラクル限定ですか。
書くの忘れてましたが、使っているのはMYSQL-3.23.45です。
やはりサブクエリが使えるDBMでないとできないのでしょうか。
0394デフォルトの名無しさん
NGNG「SELECT SUM( aaa * bbb ) AS ccc FROM TEST_TABLE」
と実行すると「算術オーバーフロー」となってしまいます。
項目aaaとbbbが共にINTEGER型であるためにエラーが出ているのですが、
ここで定義しているcccに対して型指定は可能なのでしょうか?
0395デフォルトの名無しさん
NGNGできない。
DBでIntger型を使おうとすること自体ドキュソ
0396デフォルトの名無しさん
NGNGできたか! それは良かった
自己満足でもいいじゃん
これで外部結合の使い方わかったでしょ!
SQLの組み方次第でかなり高速になるし
イメージ通りにデータが取得出来るとプログラム書く量が少なくなるしね!
ついては多くのプログラムを任され、評価につながるかも知れないし
>394
確かSQL鯖の型変換は、ConvertかCASTだったはずなので
例えばだけど
SELECT SUM( Convert(numeric(10,0),aaa) * Convert(numeric(10,0), bbb) ) AS ccc FROM TEST_TABLE
でいかへんか?
numeric(10,0)ちゅーのは例だよ!
それでダメならSUMの上にもConvertをかけてみよう!
それでもダメならお手上げです
0397たまごちゃん
NGNGけどこれって勉強していて実務で役立ちますか?
僕は実務経験はないので就職にはやくだちますか?
0398デフォルトの名無しさん
NGNGSQLサーバーとかバカ高いんじゃ。オラクルも高い。
我々一般人がSQL勉強するときはどうすればいいんじゃろ?
アクセスVBAとの違いも教えテホスィー。
0399SQLビギナー
NGNGaaa,1
bbb,2
ccc,3
ddd,4
eee,5
いうテーブルがあって、no の下位2ビットが 1 or 2 の場合だけ抽出したい場合、
どのように書けば良いのでしょうか?
0400デフォルトの名無しさん
NGNGオラクルマスターはDBの知識でSQLの勉強は関係ないヨ
役には立つと思うけど
>>398
SQLを勉強するって、SQLの構文を勉強するって事だよね
じゃぁAccessで十分です。
VBAはあんま関係ないような。
0401デフォルトの名無しさん
NGNGSELECT テーブル1.id
FROM テーブル1
WHERE id / 4 like '%.25' or id / 4 like '%.5'
ってだめかな。だめかも・・・(w
0402382
NGNGOracleは
(RIGHT OR LEFT)OUTER JOIN ON TABLENAME
の構文をつかえないみたいだよ。(+)だけ。
外部結合の機能はちゃんとあるんだから、たんにSQL
パーサだけ拡張すればいいだけだと思うんだが、何で
サポートしてくれないんだろ?
0404デフォルトの名無しさん
NGNG>>>397
>オラクルマスターはDBの知識でSQLの勉強は関係ないヨ
>役には立つと思うけど
397はオラクルシルバーって言ってるので、
もろにSQLの知識の部分を問われるテストだと思われ。
DBの知識(というかオラクルの知識)も触り程度は範囲に入ってるけど。
ただ、高いの個人で受けるのはそんなにお勧めはしないが・・・
シルバー程度ならある意味実務でDBに触れている人ならちょっと
勉強すれば誰でも取れるし。持ってないけど。金が勿体ないから。
>外部結合の機能はちゃんとあるんだから、たんにSQL
>パーサだけ拡張すればいいだけだと思うんだが、何で
むしろ標準規格を(+)にして欲しい。
0405382
NGNGいやだからさ、標準化団体なんてどうせ一度決めたら融通利かない
お役所親父の集まりなんだろうから、OracleのSQLが両方サポートして
くれるのが一番ありがたいよ…
システムで使用するDBだけOracle以外のものと差し替えする羽目になった
時、使っていたSQL文を片っ端から書き換えていくのが面倒くさいんだよね…
あ、囲い込みの手段?ならある意味納得。
0406デフォルトの名無しさん
NGNG結合条件と選択条件を明確にできるので標準SQLのほうがいい。
0407デフォルトの名無しさん
NGNG最近どっかで見かけた気がするんだけど?
>>406
>結合条件と選択条件を明確にできるので標準SQLのほうがいい。
んじゃ、INNER JOINとかも使うんか?
結構メンドイくて見づらいと思うんだけど?
0408デフォルトの名無しさん
NGNGできました。どうもです。
0409デフォルトの名無しさん
NGNGなんで、そこまで標準にこだわってるのだ?
あくまでも私の個人的な感想ですけど
業務アプリケーションで考えれば、シェアの6〜7割はORACLEで占めてるんじゃ?
SQL鯖が2〜3割(多いような気がする)? その他(PostgreSQL・MySQL)が1割弱?
詳しく調べた訳じゃ無いので数値には突っ込まないでね!
影の標準じゃ?
どっちにしろ「SQL教えて〜」くるのは初心者(ORACLE・SQL鯖)だと思うし
0410デフォルトの名無しさん
NGNGそれしか教わってなかったので使おうとした時困った。
どっち使うかは好みなのでどっちでもいいと思う。
でも標準の書き方をサポートしないのはおかしい。
ユーザーの事を考えたらやるよね普通。
俺は(+)のほうが好きだけど。
0411たまごちゃん
NGNG求人とか見ても他の言語に比べるとないような気がするんですが・・・。
0412デフォルトの名無しさん
NGNG他の言語って…一体何と比べてるの?
0413デフォルトの名無しさん
NGNG0414デフォルトの名無しさん
NGNG業務アプリケーションって言われるのは、たいがいSQLを使用しています
例でいうと、在庫管理・請求管理・ユーザ管理などなど
普通はプログラミング言語+SQLっす
だから求人には書かないことが多いと思うっす
0415デフォルトの名無しさん
NGNGDB2をわすれるなよ・・・
0416409
NGNGその他に入るんじゃ<DB2
あとはBtrieveもね
0417たまごちゃん
NGNGSQL単品では役に立たないのですか?
今からSQL以外の言語も覚えようと思ったらどの言語がデータベースをより
生かせると思いますか?
あと データベースをやるにはネットワークの知識も要りますか?
0418デフォルトの名無しさん
NGNGJavaでしょ。
Oracle8とか9とかはバリバリJava意識してるし。
0419デフォルトの名無しさん
NGNGDBは条件付問い合わせが可能なストレージサーバとして使用する
ことが多いから、ネットワークの知識もないといかん。
つうかキョウビ、スタンドアロンでDBなんぞ使わん。
0420デフォルトの名無しさん
NGNGうーんSQL単体ではどうなのか?
オンリーじゃこの世代では無理でしょ
本職にしようと思うなら
悪いことは言わない他の職業を探した方が良いと思う
普通2〜3個の言語かけても不思議じゃない職業だから
0421デフォルトの名無しさん
NGNG普通の業務アプリ開発ではある意味必須のスキルだよ。
より生かせる言語ねえ・・・OracleDeveloperとか?使った事無いけど。
つーかなんかこだわる部分がズレてる気がする。目的は何なんだ。
SQLのみで仕事?DB管理者かな。もちろんDBの知識が必要になるけど。
でも専属のDB管理者置いてるのはよほど大きな企業だけじゃん?
あと金なくて業務アプリ発注できなくて直でDB操作してるとことか(藁
なにげにオススメなのはシステム屋じゃなくユーザーサイドでDB扱える人材。
これが結構重宝がられる。その場合はAccessVBAがいいかな。
0422デフォルトの名無しさん
NGNG異なるデータベースファイルからの追加って、どう記述したらいいのでしょう?
insert into {データベース1のテーブルA} select {データベース2のテーブルA} where 条件なんたら・・・
のような感じでやりたいのですが、できますでしょうか?
Del付属のInterbaseを使っています。
0423keken
NGNGPostgresを使っているのですが
WEBでのページャー表示の方法がわかりません
例えば
1のリンクを押すと 1〜10件目の内容が表示
2のリンクを押すと11〜20件目の内容が表示
というようなものです。
参考になるHP等ありましたら教えてください。お願いします。
0424仕様書無しさん
NGNG0425デフォルトの名無しさん
NGNGSQLでは出来ないと思う、ユーティリティかなんかだな
パッと考えただけだと、ACCESSでODBCで繋ぎ
insert into ・・・ select をする
>423
PostgreSQLなら、LIMITとOFFSETだな
0426sybase11.9.2 for linux
NGNG親A, 子B(0〜nレコード)というテーブルがあるのですが
create table A (
id char(8)
)
create table B (
id char(8),
link_id char(8), /* A.idとリレーション */
date smalldatetime
)
目的:
AとBを結合して値(A.id, B.date)を取得したい
条件:
1.BはB.dateが最も大きな値を持つレコードを引っ張ってくる
2.Bが無い場合はB.dateはnullでOK
よろしくお願いします。(__;
0427デフォルトの名無しさん
NGNG360でがいしゅつ。
0428デフォルトの名無しさん
NGNGさいべーすの構文知らないので細かいことはワカランですが
外部結合をみるとよろし
>>380 で限りなく似たのががいしゅつ
0429426
NGNGありがとうございます!
それと外出ですみませんでした。
0430426
NGNG>>380を参考に from句の中に"(select select_list) table_alias"を
書いて試してみたのですが、SYBASEではエラーになってしまいました。
pdfのリファレンスを読んでみたのですが、どうもfrom句の中にselectを
使った仮想テーブル(?)はサポートしていないようです。
他にやり方を知っている方がいましたら教えてください。
0431デフォルトの名無しさん
NGNG0432426
NGNG「from句にインラインビューを使えない場合は、相関サブクエリーを使う」
という情報を得たので試してみたのですが、3行目のカンマで構文エラー
になりました。;-(
select a.id, b.date from TableA a, TableB b
where a.id*=b.link_id and
exists (select id, max(date) from TableB
where id=b.id
group by id
having max(date)=b.date)
これでいけそうな気がするんだけど…。
>431
レスありがとうございます。:-)
できれば明示的にviewやテンポラリは使わないで実現したいと思っています。
そうも言ってられなくなってきましたけど。(汗)
0433426
NGNG>できれば明示的にviewやテンポラリは使わないで実現したいと思っています。
これだけだと単なる1行野郎だと思われてしまうので、補足(言い訳)
させて頂きますと、テーブル設計しているのが私ではなく(顧客)、
アプリケーションで使用しているテーブルは例えテンポラリだろうと
仕様書に記述しておかなければならないので、この時期にその行程
に戻るというのは手続き上面倒なため、できれば既存のテーブルだけ
で実現させたいと考えています。
結局は今頃こんなところでハマっている私のミスなんですけど。(__;
0434428
NGNGんっ? そんなに難しいSQL書かなきゃいけないのか?
あぅFROM句のサブクエリ無いんですか
さいべーす=SQL鯖と仮定して(たしか6.5までは元が一緒のはず)
外部結合知らずの簡単な質問だと思って深く考えなかったっすけど
こんなもんで良いと思ってたんだけど
select a.id, max(b.date) from TableA a, TableB b
where a.id *= b.link_id
group by a.id
要望が違ったのか?
0437山神
NGNG>むしろ標準規格を(+)にして欲しい。
3テーブルあってAB間外部結合 BC間内部結合
のとき結合順序によって結果が変わるので
結合順序を明記できるANSIの
(INNER ,LEFT OUTER,RIGHT OUTER) JOIN
のほうがいいと思うがどうよ。
0438デフォルトの名無しさん
NGNG0439426
NGNGすみません。
ここにアップしたサンプルはシンプルに説明しようとするあまり
問題の本質まで削ってしまっていました。
結局、434さんが示してくれたようなSQLを複数unionで
つないで、それに対してorder byかけることによって目的を
達成できました。ってこれだけ書いても訳わからないですよね(汗)
# unionの結果にorder byできることを知らなかったのが回り道の始まり(鬱
自分でもSQLの知識が浅いと思っています。仕事が落ち着いたら
ここのスレもじっくり初めから読んでみたいと思います。
アドバイスをくれた皆様、ありがとうございました。
0440デフォルトの名無しさん
NGNG普通DBMSを名乗るものには、ExplainPlan(実行計画)を
見るツールぐらいは有るだろ、そっちの方が明示的に見れるぞ
0441デフォルトの名無しさん
NGNGツールで見るのがいいとか
もう、あほかばかかと(中略)
おめえらAccessでDrag&Dropで結合しとけ
0442442
NGNG以前、出来るには出来たんだが、あんまりスマートでないような気がしてる問題をひとつ。
テーブル1
ID 有効率 可能回数
1 89.6 23
2 96.1 16
3 99.5 26
4 100.6 15
5 110.5 10
という風なデータがあります。IDはPKです。上記表は有効率でソートしてみました。
他の任意のレコードと比較し、「可能回数が少ないくせに、有効率も低いレコード」は消去したいのです。
上記例の場合、
ID 有効率 可能回数
1 89.6 23 ← ID=3のデータより劣るので削除
2 96.1 16 ← ID=3のデータより劣るので削除
3 99.5 26
4 100.6 15 ← ID=5のデータより劣るので削除
5 110.5 16
結果:
3 99.5 26
5 110.5 10
#結果として、有効率で降順にソートすると、可能回数が昇順になるはずです。
どうやったら抽出できますか?SQLは一発でおながいします。
Accessでやっていますが、一般的な範囲と言うことで。
あんまり面白くないかな?
0443ずーる
NGNGですか?
0444デフォルトの名無しさん
NGNG有効率のMAXのレコードと可能回数のMAXのレコードをUNION
させただけのような気がするけど・・・違うの?
0445デフォルトの名無しさん
NGNG有効率の順位と可能回数の順位との平均を出して、基準以下を削除
0446デフォルトの名無しさん
NGNG0447デフォルトの名無しさん
NGNGVBはともかく、SQLは今のところDBやる上で必須なのでやっておいて損は無いでしょう。
とりあえず、どっちもまだまだ現役なので時代遅れって事は無いと思うが。
ただ、いつまでもそれだけだと先が見えている事だけは事実。
0448442
NGNGテーブルが、
ID 有効率 可能回数
1 89.6 23
2 96.1 16
3 99.5 26
4 100.6 15
5 110.5 10
6 112.5 8
なら
ID 有効率 可能回数
3 99.5 26
4 100.6 15
5 110.5 10
6 112.5 8
の4レコードを抽出したいです。
0449デフォルトの名無しさん
NGNG対象テーブルにおいて、可能回数のMAX値を
持つレコード(この場合ID=3)の有効率(この場合99.5)
以上の有効率数値を持つレコードを抽出しろ
ということか?
しかしMAX値を持つレコードが複数あり、有効率が
それぞれ異なったらどうするのだ?
その場合は有効率が低い方を優先させるのか?
しかし、これだと最初の442説明のID4は抽出
されてしまうので違うと思うが。。。
「可能回数が少ないくせに、・・・」
「くせに」なんていう言葉からどうロジックが組めるんだ?
もっと、仕様を的確に伝えてくれ。
抽出する場合の仕様は、削除対象を
伝えるのではなく、抽出すべき条件を
書いた方が伝わりやすい。
0450デフォルトの名無しさん
NGNGおまえは単表でプログラムでも書いておけ
0451デフォルトの名無しさん
NGNGのサンプルと抽出結果が違うジャン
訳ワカランぞ
0452442
NGNG抽出すべき条件は、自分自身よりも、有効率と可能回数の両方が大きい
レコードが存在しないレコード、を抽出したいです。
しかも、>>442が間違ってる。すいません。
ID 有効率 可能回数
1 89.6 23 ← ID=3のデータより両方小さいので捨てる
2 96.1 16 ← ID=3のデータより両方小さいので捨てる
3 99.5 26 両方大きいものはないので、抽出
4 100.6 15 ← ID=5のデータより両方小さいので捨てる
5 110.5 16 両方大きいものはないので、抽出
です。ごめんなさい。すいません。申し訳ない。
0453デフォルトの名無しさん
NGNGselect distinct ID, 有効率, 可能回数 from
(
select * from
(
select max(有効率) 有効率, from Table
) a, Table t
where a.有効率 = t.有効率
union all
select * from
(
select max(可能回数) 可能回数, from Table
) b, Table t
where b.可能回数 = t.可能回数
)
ちゅーかさ、これじゃ無いかって>>444で言ってるんだけど?
ちがうのか?
同じ数値が複数出てきてもよいのかい?<わかりずらいな
例えばだが、可能回数が全て26だったら、全レコード出てきても良い?
最後に、有効率と可能回数の最大値を、それぞれ取ってるから
おなじIDが複数出てくる可能性があるので一番上にdistinctを付けてみたけど
こんな感じでいいのかい?
ようは最大値を持ってきたいんでしょ
パフォーマンスを考えると素直に
最大値を2回持ってくるやり方の方が良いと思うぞ
0454449
NGNGID=4は抽出だろ?
有効率がID5のそれよりも大きい値だぞ。
まぁ、いいや。
SELECT *
FROM table1 t
where not exists
(select * from table1 where (a > t.a and b >t.b) ) ;
0455442
NGNG0456449
NGNG貼っちまった。
SELECT *
FROM table1 t
where not exists
(select * from table1 where (有効率 > t.有効率 and 可能回数 >t.可能回数) )
説明は
>>442の仕様通り
これで仕様を的確に書く必要がわかったろ?
(例が間違ってても、通じるということだ)
0458デフォルトの名無しさん
NGNG逆もあるだろ! 有効率が全部おなじ
もしくは全部同じちゅーのも考えられるわ
0460442
NGNGありがとうございます。
>>453 今自宅なんで、ACCESSしかないんですが、FROM句の構文エラーです
がでちゃいますぅ。
0461442
NGNG全く同じ場合、両方欲しいです。
0462デフォルトの名無しさん
NGNG0463山神
NGNGANSIで
select T1.F1,T2.F1,T3.F1 from T1 left outer join
(T2 inner join T3 on T2.F1=T3.F1) on T1.F1=T2.F1
と
select T1.F1,T2.F1,T3.F1 from (T1 left outer join T2 on T1.F1=T2.F1)
inner join T3 on T2.F1=T3.F1
は(+)だとどういうふうに書き分けるのですか?
>>440
だから実行のPlanだけやのうて上記2つのSQLは
結果も違うのですけど。
というか誰もplanなんぞ問題にしてないですが。
0464デフォルトの名無しさん
NGNGひとつのコードから、マスタテーブル内の対応する名称を取得する
というプレーンな情報取得についてなのですが、
1.外部結合によるオーソドックスな手法
2.ユーザー定義関数にコードを引数で渡し、
関数内でマスタテーブルからデータを取得
おそらく1.のほうが早いんだろうとは思うのですが、
実際のところどうでしょうか?データ量にもよると
思いますが、どの程度のものなのでしょう?
データが取り揃わず検証できていない状況です。
ご経験ある方、お知恵をお借りできますか?
0465デフォルトの名無しさん
NGNGxx件目から、??件を取り出すという場合、基準になる項目が重複可能な場合、
クエリー結果に連番を振るという手段しかないんでしょうか?
select top 10 F1,F2 from
(select top 4010 F1,F2 from T order by F1 asc)
order by F1 desc
(↑>274を参考にしました)や、
select top 10 F1,F2 from T
where F1 >
(select max(F1) from
(select top 4000 F1 from T order by F1) tbl
)
order by F1
のような方法では正しい結果が取れません。
連番方式は激烈に遅いので、避けたいです。
やっぱり、F1項目+ユニーク数値 などのダミー項目を作っておくとか、
姑息な手段しかないのでしょうか?
スカッと一発で解決できるSQLを教えてください。
ちなみに、Access2000とか、SQL Server7.0/2000 を想定しています
0466デフォルトの名無しさん
NGNG>select T1.F1,T2.F1,T3.F1 from T1 left outer join
>(T2 inner join T3 on T2.F1=T3.F1) on T1.F1=T2.F1
select T1.F1,T2.F1,T3.F1 from T1,T2,T3 where T1.F1 = T2.F1(+) and T1.F1 = T3.F1(+);
>select T1.F1,T2.F1,T3.F1 from (T1 left outer join T2 on T1.F1=T2.F1)
>inner join T3 on T2.F1=T3.F1
select T1.F1,T2.F1,T3.F1 from T1,T2,T3 where T1.F1 = T2.F1(+) and T2.F1 = T3.F1;
つかこれはエラーだな、これが通るRDBMSはあるのか?
Oracle SQLServer共にエラーが出た。
>だから実行のPlanだけやのうて上記2つのSQLは
>結果も違うのですけど。
何が言いたいのかよく分かりませんが、バカな私に説明していただけませんか?
というか、私はあなたのことかなりバカな人に見えるのですが。
0467デフォルトの名無しさん
NGNGOraでいえば
T1.F1=T2.F1(+) and
T2.F1=T3.F1
は>>463の前者、後者どっちの結果を
期待してるのか見分けがつかん!
ということだろ。
Oraは外部結合から評価するので、>>463の後者となる。
従って、結局全て内部結合で結合した結果セットと同じ
となる。
ちなみにMSSQL-ver6以前 Sybaseの場合
T1.F1*=T2.F1 and
T2.F1=T3.F1
はエラーになる。
Oraユーザで>>463の前者の様な結果セットに
意味があるのか?(実際出来ても意味無し。)
後者の結果で返ってくるなら、内部結合使って
そんな結合しねぇよ。なんていう反論も出そう
だから、結合順序のコントロールだけではなく、
SQL92仕様の結合は、「結合と条件を明示的に分け、
条件と結合の評価順序をコントロールできること」
に対して有意性があると言った方が説得力がある
と思う。
結合と条件について詳しくは>>71前後
から書いてあるから読ぬ。
0468デフォルトの名無しさん
NGNGMSSQL-ver6以前 Sybase
T1.F1*=T2.F1 and
T2.F1*=T3.F1
Ora
T1.F1=T2.F1(+) and
T2.F1=T3.F1(+) -Oracle
が普通だわな
これは期待する結果は一つだ。
SQL92で検証してみな
select T1.F1,T2.F1,T3.F1 from
(T1 left outer join T2 on T1.F1=T2.F1)
left outer join T3 on T2.F1=T3.F1
と
select T1.F1,T2.F1,T3.F1
from T1 left outer join
(T2 left outer join T3 on T2.F1=T3.F1)
on T1.F1=T2.F1
で。
だから、上の>>467の理由と併せると、
Oraユーザにうまく浸透しないのだよな。
0469デフォルトの名無しさん
NGNG>>463をどうよんでも
>SQL92仕様の結合は、「結合と条件を明示的に分け、
>条件と結合の評価順序をコントロールできること」
>に対して有意性があると言った方が説得力がある
に言及してるとは思えないですけど。
>>71には同意するけど、やはり通常の使い方ではOracle
の書式の方が分かりやすい。
JOINを使うと、>>463のようにぐちゃぐちゃになりがち
この点、>>463はわざわざ悪例を出してくれたといえる。
0470テストには間に合わなかったな
NGNG忙しいあなたのためのSQL入門
http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20011226/1/
0471デフォルトの名無しさん
NGNGっていうか、朝一から
OUTERだとかINNNERだとか考えてるんっすか?
そんなに時間があるなら自分でお調べになった方がはやいのでは?
0472ヤン
NGNGそっちの言語もプロレベルまで覚えなきゃいけないのですか?それともある一定の、レベル
ぐらいでよいのでしょうか?
0473デフォルトの名無しさん
NGNGそれともDBのチューニング一筋で生きてゆく?
0474デフォルトの名無しさん
NGNG定義関数使う方が圧倒的に遅いと思うよ。
定義関数も結局はスカラサブクエリということになるからね。
定義関数を書き下すと
Select
(Select FIELD_NAME From MASTER_TABLE Where CODE = ...)
From ...
になるわけでしょ?
つまり、レコードの数だけ (Select FIELD_NAME ...) を評価しないと
いけなくなる。この Select句に埋め込まれた(Select FIELD_NAME ...)を
スカラサブクエリと呼ぶんだけど、これはパフォーマンスを落とす顕著な
パターンなんだ。覚えておくといいよ。
0475デフォルトの名無しさん
NGNGむしろ、プログラミング言語を深く学んだ方が良い。
アプリケーションエンジニアにとってもデータベースはできて当然という
方向になりつつあると思う。
データベースの取り扱いが格段に容易になってきたからね。
0476デフォルトの名無しさん
NGNG>>アプリケーションエンジニアにとってもデータベースはできて当然という方向になりつつあると思う。
それは言えてる
ただ複雑なSQLを書けることによって
信じられないくらい簡単にプログラムを書くことが出来るように
なる場合がある。
0477デフォルトの名無しさん
NGNGDelphiで設定はわかるのですが、SQL文の書き方はわかりません
たとえばただ単にbeginとendの間に
select〜
From〜
を指定すると思うのですが、それだけでは当然エラーが出てしまいます。
それ以前のDelphiにSQLを使うという宣言が必要だと思いますが、それがわかりません
どうぞ教えてください。
0478デフォルトの名無しさん
NGNGDelphiのコードに直接書くのではなくて、
TQuery 等の SQLプロパティに書いておきます。
プログラムの中で記述するには
Query1.SQL.Add('Select * from A');
みたいな感じで書くか、SQLを書いたテキストファイルを
Query1.SQL.LoadFromFile('TEST.SQL');
などとして読み込んでおきます。
実行はQuery1.ExecSQL;です。
つーか、サンプル見てね。
0479デフォルトの名無しさん
NGNGそうだね。データベース(SQL)を「引き出し」としか思っていなくて
プログラミング言語でなんでもかんでもロジックを実装してしまう
アプリケーションエンジニアが多いのも事実だね。
(レコードの単純な出し入れしかしない人だよ)
データベース(SQL)が処理系だということに気が付くと、
アプリケーションエンジニアとして、ひとつステップアップしたと
いえるんじゃないかな。(ストアドや高度な結合を使いこなせて、
処理系としてのデータベースを利用できる人だよ)
0480464
NGNG返事ありがとうございます。
圧倒的に遅いとのこと。なるほど
>Select
>(Select FIELD_NAME From MASTER_TABLE Where CODE = ...)
>From ...
と提示して頂けて問題なく理解できました。
となるとユーザー定義関数ってのは、
文字列操作や、そういったDBと絡まない
SQLにおいてのみ利用価値がある、
という認識でいいのでしょうかね。
CASE WHENやCONVERTってどうしても
SQLが煩雑になっちゃうからできれば
使いたいところです。
ありがとう。
0481デフォルトの名無しさん
NGNGようは使い方だな。定義関数を使うと構造化できてクエリ全体を
見やすくできるから、使い方によっては非常に便利だ。
書き下したときに、どんなクエリになるか考えながら使えばいいと思うよ。
0482デフォルトの名無しさん
NGNG特殊な例だったのかも知れませんが
トランザクションテーブルに名称を持たした事があるよ
0483デフォルトの名無しさん
NGNGDelphiで下記のように設定しても、表示はされるがSQLとしては何もおこりません
どこか間違っているのでしょうか?
begin
Database1.AliasName := 'ABC; // ODBCのデータソース名
Database1.DatabaseName := 'Aテーブル'; // DBのエイリアス
Database1.LoginPrompt := False; // DBのログインダイアログを抑制
Table1.DatabaseName := 'Aテーブル';
Table1.TableName := 'Aテーブル'; // MDB内に作ったテーブル名称
DataSource1.DataSet := Table1; // TTableコンポーネントを指定
DBGrid1.DataSource := DataSource1; // TDataSourceコンポーネントを指定
Query1.DataSource := DataSource1;
Query1.SQL.Add('SELECT *');
Query1.SQL.Add('FROM Aテーブル');
Query1.SQL.Add('ORDER BY タイトル DESC');
Database1.Open;
Table1.Open;
Query1.Open;
end;
0484デフォルトの名無しさん
NGNGDelphiでいけ!
0485デフォルトの名無しさん
NGNG何をやりたいのかよくわからないんだけど、Query1の結果を表示したいだけなら
Table1 はいらないと思う。
DataSource1.DataSet := Query1;
DBGrid1.DataSource := DataSource1;
でいーんじゃない?
ま、Delphiスレで聞いたほうがいいでしょうsage
0486デフォルトの名無しさん
NGNG例えば
Query1.SQL.Add('ORDER BY ID DESC'); 並び替え
Query1.SQL.Add('DELETE FROM テーブル'); 削除
みたいにSQL文で一つのクエリーに2つの命令って出来ますか?
0487デフォルトの名無しさん
NGNG何を聞きたいのかいまいち分からないが
ストアド使うのが一般的かな?
0488太郎
NGNG今、いったん、件数を数えてから、perlとかのrand関数つかってやってます。
Count()とrandom()あたりをつかうのかなぁ?
わかるかた、教えてくださいませ。
0489デフォルトの名無しさん
NGNGランダムで取り出すって意図が分からないですが
適当に取り出すって意味なら
ORDER BYをかげずに、取り出せば取得すれば良いんじゃないの?
だからPostgresならLIMITとOFFSETで出来ないのか?
0490太郎
NGNGとかしても、きっと、一番最新のデータがとりだされるだけでした。
0491デフォルトの名無しさん
NGNGだからランダムちゅー意図をハッキリせいって
たまたま最新レコードが最初にヒットししてるんじゃ?
limitの位置をずらせばランダムになるやんか
っと思うんだけど?
0492デフォルトの名無しさん
NGNGQuery1.SQL.Add('FROM AAA,BBB,CCC');
Query1.SQL.Add('WHERE AAA.ID = BBB.項目1');
Query1.SQL.Add('AND CCC.ID = BBB.項目2');
Query1.SQL.Add('AND …');
の後にORDER BY ID DESCを挿入すると思うのですが
普通に入れたらエラー(句にある複数のDテーブルを参照…)になってしまいます。
教えてください
0493デフォルトの名無しさん
NGNGそりゃそうだろ。AAA.ID なのか CCC.ID なのか明示しなきゃ。
0494デフォルトの名無しさん
NGNGデルファイのコードで書くなちゅーの
ここで質問するならSQLだけで説明して欲しいわ
0495デフォルトの名無しさん
NGNG例えば
ORDER BY AAA.ID DESCですか?
0496デフォルトの名無しさん
NGNGPostgreみたいにカーソルの明示的な移動って出来ないのでしょうか
1row前に戻るとか。
0497496
NGNG0498デフォルトの名無しさん
NGNGFETCHしか無いから出来ないちゃうか?
ちゅーかカーソルの明示的な移動って、
どういう使い方をするときに必要なのだ?
0499496
NGNGカーソルを返すストアドファンクションで、
中で%NOTFOUNDまでループさせた場合、
その後にカーソルをreturnするとエラーになっちゃうんです。
%NOTFOUNDの手前でとめればOKなんですけど。
0500496
NGNG面倒なので、なんとかカーソル動かせないかなぁと思ったのです。
0501デフォルトの名無しさん
NGNG糞スレリサイクル大成功?
0502デフォルトの名無しさん
NGNGFETCHする前に変数に、変数に入れておけば良いんじゃない?
そしたら最後のレコードを取得できるんちゃう
0503デフォルトの名無しさん
NGNG例外処理で返すのは反則?
0504デフォルトの名無しさん
NGNGという処理はどうやりますか?
0505496=499
NGNG的はずれなこと言ってたらごめんなさい。
>>502
フェッチ前にカーソルの中身を%ROWTYPEの変数に渡す
ということでしょうか?
>>503
例外を返すのもやっぱりカーソルじゃないとならないから、
難しいのではないでしょうか。。。
0506504
NGNGSELECT * FROM テーブル名 GROUP BY id
HAVING MAX(date1)=MAX(date1)
こんな感じでいいかね?
0507デフォルトの名無しさん
NGNG0508504
NGNG>>507
実はSELECTではなくUPDATEをしたいのですが、
出来れば一回のSQLで抽出したいので、
WHERE区のなかで「日付フィールドが最大のもの」と
指定できればと思うんだけど。
ちなみにMYSQLなのでサブクエリーは使えないんです。
0509デフォルトの名無しさん
NGNG「日付フィールドが最大のもの」という言葉だけでは
"GROUP BY id" なんていう条件は予想もつかない。
説明を略しすぎてない?
0510504
NGNGフィールドの構成は
id,date1
となっていて、idはユニークではなく重複がありえる。
date1は日付です。
例えば
id,date1
tanaka,2002-01-01
tanaka,2002-02-01
suzuki,2002-01-01
yamamoto,2002-01-01
yamamoto,2002-02-01
yamamoto,2002-03-01
・・・こんな感じになってます。
0511504
NGNG例えば、idが'yamamoto'でdate1が最大のもののdate1を更新したいのです。
説明不足で申し訳ない。
0512502
NGNGそのとおり
>504
基本中の基本だ。MAXあたりを調べな
0513デフォルトの名無しさん
NGNGシーケンスがないデータベースへ移植するための簡単な方法はないですか?
SQL は外部定義になっているので SQL レベルで対応できればサイコーです。
思い付く方法といえば、ストアド作るか、シーケンス用のテーブル作って
SELECT 〜 FOR UPDATE, UPDATE 〜 しかないです。どちらもコードの修正が必要
になっちゃいます。
0514デフォルトの名無しさん
NGNGトリガーでやる
>指定したIDの日付が最大のものを更新したいのです
select文は簡単だが、
副問い合わせができないと、
update文はきついな。
しかし、できないというわけではない
MySQLはANSI92だったな
テーブル名をtable1とすると、
update table1
set date1 = '2002-02-28'
FROM table1
LEFT OUTER JOIN table1 a ON (table1.id=a.id and a.date1 > table1.date1)
where
a.id1 is null and
table1.id = 'yamamoto'
0516515
NGNG>select文は簡単だが
スマソ
副問い合わせができないと
selectもきついな
でも、515のようにすればできる。
SELECT a.*
FROM table1 a
LEFT OUTER JOIN table1 b ON (a.id=b.id and b.date1 > a.date1)
where
b.id1 is null and
a.id = 'yamamoto'
0517504ではないが
NGNGすげえ。
半信半疑で実行して見たら本当にできたよ。
MySQLでこんなことできるとは知らなかった……。
0518515
NGNG本当はnot exists文が使えると
分かりやすいんだが。
あと
>>515-516
の両方のレスで
where句の
b.id1 is null and
は
b.id is null and
の間違い(コピペ修正ミス)
ゴミン
0520デフォルトの名無しさん
NGNGかなり基本的な構文まで異なってる。
0521515
NGNGうっ!
スマソ、折れSQLSeverで試してた、
updateのfrom句はT-SQL専用だった。
(Oraもできないね)
ガセ言っちまった、ホントにゴミン。
逝ってくる・・・くしょぉ!
0522504
NGNGすばらしいです。SELECTの方はできるんですねー。
カナーリ勉強になりました。どうもです。
UPDATEの方は引き続き勉強してみます。
ちなみにSELECTの方は>>111の質問とかぶってるみたいでしたね。
0523504
NGNG0524デフォルトの名無しさん
NGNGそれは同意することにやぶさかではないが、とりあえず今回の場合は、
すなおに MAX DATE を取る SELECT を投げて、
その結果使って UPDATE
の二度手間でいいじゃん、と思うのはいけないことだろうか?
その方がわかりやすくていいじゃん。
無理に一つに書く必要がないなら。
0525517
NGNGほんとうにあれだけのカラムしかないテーブルなら、yamamoto の最新日付は
SELECT MAX(date1) FROM table1 WHERE id='yamamoto' GROUP BY id;
でとれるよね。まあカラムはあれだけじゃないと思うけど。
本当にあれだけで、MAX(date1)をいちいち更新する作りなら、
どういうつもりで設計したのか小一時間(以下略)
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNG私は Oracle+ACCESS で情報系システムを作っていますが、よろしければ
SQLをコードに埋め込まない方法について教えてください。
今は、もろに埋め込んでいますが、より良い方法があれば知りたいのです。
0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNGそのWOとやらがフリーでオープンソースで劇軽なら導入を検討させて頂きます。
0530デフォルトの名無しさん
NGNGどうせ使いこなせないと思うから、検討する必要すらないよ。
完全なる畑違い。
Perl/PHP/Ruby + PostgreSQL/MySQLでも使えば?
0531デフォルトの名無しさん
NGNGDB表をカーソルからフェッチして、それをPL/SQL表に入れて
さらにそれを別のカーソルでオープンする、ということは可能でしょうか?
また、PL/SQL表のポインタを返すようなストアド関数は作成可能でしょうか?
宜しくお願いいたします。
0532デフォルトの名無しさん
NGNGSQL92の標準SQLについての解説しているようなページはないでしょうか?
どなたかご存知でしたら教えて下さい。
0533デフォルトの名無しさん
NGNG質問の答えとは全然違うので申し訳ないのですが・・・
最初のSQLを副SQLにして、次のSQLのFROM句にすることで解決できませんか。
0534デフォルトの名無しさん
NGNGありがとうございます。
ですが、ちょっとそれが難しいんです。
やりたいことは、戻り値がカーソルであるストアド関数で
1.引数が0のとき :DB表をSELECT → カーソルでOPENし、
そのままRETURNする
2.引数が1以上のとき:DB表をSELECTし、そのリザルトの中で
「引数番目に出現した行のみ」をカーソルでRETURNしたい
なのですが、2ができなくて困っています。
global temporary tableを使えば可能ですが、
createはするなと言われてしまっています。。。。
0535デフォルトの名無しさん
NGNGカーソルでなくても、何か他のものでRETURNできれば良いのですが
1と2で戻り値が異なってはいけない、とも言われているので・・・。
宜しくお願いします。
0536デフォルトの名無しさん
NGNG戻り値 ×
戻り値の型 ○
0537デフォルトの名無しさん
NGNGPostgresでdatetime型の値を扱うのですが、
YYYY/MM/DDへのフォーマットはどうすればいいのでしょうか?
オラクルではto_charやto_dateなどを使用していたもので。。。
宜しくお願いします。
0538デフォルトの名無しさん
NGNG>「引数番目に出現した行のみ」をカーソルでRETURNしたい
「のみ」なんだろ?
別にPL/SQL表にいれなくてむ、引数番目までそのカーソルをフェッチ
して返せば問題ないんでないの?
#つーかカーソルを戻り値として使う事なんてできるんだ。知らんかった。
#カーソルの閉じ忘れが怖そうだなぁ。
0539534
NGNGいえいえ、そうすると、「n番目から最後まで」の
行を返すことになっちゃうんですよね。カーソルってポインタだから・・・。
#呼び出しはJAVAでやってるから、
#そっちで対応すればいいのになぁ。。
0540デフォルトの名無しさん
NGNGDB2のコマンドセンター
AS/400の対話型SQLも
オラクルはNTでフリーソフトの画面からSQL文叩いてたよ。
(昔なのでウル覚え)
ほとんどおなじだね。データ型が少し違うくらいだな。
元祖はIBMなん?
0541538
NGNG亀レススマソ。
ちょっと言葉足らずだったけど、フェッチした後変数に入れて返せばいいのに
と思って書いたんだけど・・・あくまで戻り値は「カーソル」なのね。
だったら、フェッチした行がユニークになる条件で、関数内でカーソルを
オープンしてそれを戻り値にすれば?
でも、それだとカーソルを閉じるタイミングが難しいねぇ。
0542デフォルトの名無しさん
NGNGs/ウル覚え/うろ覚え/
0543デフォルトの名無しさん
NGNG>Postgresでdatetime型の値を扱うのですが、
>YYYY/MM/DDへのフォーマットはどうすればいいのでしょうか?
>
>オラクルではto_charやto_dateなどを使用していたもので。。。
同名の関数があります。
書式指定文字列はちょっと違うはずなので、
その辺はドキュメントみてちょ。
0544デフォルトの名無しさん
NGNGdate型をGMT通算秒で表示したいのですがどうすればいいんでしょう?
0545578
NGNG使えばGMTに変換は可能だぞ
0546デフォルトの名無しさん
NGNGたしかグリニッジ標準時間で1970年1月1日 0時0分0秒からの
経過時間を秒で表現するやつっしょ?
でもoracleで使えるのかな?
0547デフォルトの名無しさん
NGNG0548デフォルトの名無しさん
NGNG0549デフォルトの名無しさん
NGNG言語はjava(jdk1.2.2)で、oracle8を使用しています。
T_SYOUHIN
型番 商品ID 納品日
111 aaaa 20020101
222 bbbb 20020104
333 cccc 20020201
T_NOUHIN
型番 商品名 納品先
111 あああ 北海道
111 あああ 東京
333 ううう 静岡
の様な感じでデータが入っており、型番をキーに
日付で絞り込み、データを取得する。というものです。
連結をせず、T_SYOUHINのみ日付で絞り込んで
データを取得する事は出来たのですが、
条件式にT_SYOUHIN.型番=T_NOUHIN.型番(+)を追加すると
データを取得出来ないのです。
本を見ながら書いたソースを下に記しますので
どなたかヒントを与えて下さい!お願いします。
sql = "";
sql = sql + "SELECT * FROM T_SYOUHIN AS T1,T_NOUHIN AS T2";
sql = sql + " WHERE (T1.納品日 >= " + 20020101 + ")";
sql = sql + " AND (T1.納品日 >= " + 20020131 + ")";
sql = sql + " AND T1.型番 = T2.型番(*)";
0550デフォルトの名無しさん
NGNGこれはソースコードからのコピペかい?そうじゃないみたいな感じだけど・・・
>sql = sql + " AND T1.型番 = T2.型番(*)";
なんで(*)なの? (+)じゃないのかい?
後、以下はJavaの文法的にもおかしいが、SQL的にも意味が?
>sql = sql + " WHERE (T1.納品日 >= " + 20020101 + ")";
>sql = sql + " AND (T1.納品日 >= " + 20020131 + ")";
Javaで文字列に数値を足したらたぶんコンパイルエラーで怒られると思うぞ。
それと2002年1月1以降で、かつ、2002年1月31日以降って
要するに1月31日以降ってことになるから、
後半は、>=じゃなくて<=の間違いじゃないのか?(1月1日〜31日)
0551デフォルトの名無しさん
NGNG叩いてちゃんと動くかどうか確認してからだな。
0552デフォルトの名無しさん
NGNG型番だけで商品を特定できるのなら商品IDは不要。
商品IDがないと商品を特定できないのなら納品テーブルには型番ではなく商品IDを置く。
商品IDが必要という前提で話を進めると、
商品名、型番などの商品に属する情報は商品テーブルだけに集める。
納品日、納品先、数量などの納品するという事実に属する情報は納品テーブルだけに集める。
0553552
NGNG0554節子
NGNG0555デフォルトの名無しさん
NGNG0556デフォルトの名無しさん
NGNGでいいのかな?
0557デフォルトの名無しさん
NGNG0558デフォルトの名無しさん
NGNG>たぶんコンパイルエラーで怒られると思うぞ。
いや、Javaは文字の結合として、できてしまうのだよ。
VB(msgbox "1" + 3 で 4という表示なる)
よりはまともな仕様だと思うが、
こんな書き方はしない方がいいな。
0559デフォルトの名無しさん
NGNG0560デフォルトの名無しさん
NGNG惜しい。
「Structured Query Language」だよ。
0561デフォルトの名無しさん
NGNGoracle8使用のPL/SQLで以下のテーブル構成から下記の条件をつけて
親、子のアイテム構成順にソートしたいのですが 上手くいきません
ヘルプ お願いします
テーブルA テーブルB
親(PK) 子(PK) パターン(PK) アイテム 優先パターン
----- ------ ----------- ---- ---------
A_1 B_1 000 A_1 000
A_1 B_2 000 B_1 111
B_1 C_1 111 B_2 444
B_1 C_2 111
B_2 D_1 333
B_2 D_2 333
B_2 C_3 444
C_3 D_1 555
C_3 D_2 555
条件1 条件2
出力は親子の構成順とする アイテムに複数のパターンがあり
例:A_1 B_1 優先パターンが存在する場合は
B_1 C_1 そのパターン以下の構成を先に
B_1 C_2 出力する
A_1 B_2 例:B_2に対してパターンが複数
存在しているので
B_2 D_1:B_2 D2のレコード
よりB_2 C_3以下の構成を
先に出力する
条件1に関してはStart With 〜を使用してなんとかなるのですが
条件2に対応できません・・・(鬱
いい知恵があったらお願いします
0562節子
NGNGDROP,DROP〜♪
0563デフォルトの名無しさん
NGNGSEQUEL(Structured English QUEry Language)
↓
SQL(Structured Query Language)
0564デフォルトの名無しさん
NGNG条件2が何を言ってるのかワカランけど、
Oracle だったらFROM句問い合わせと union を
多用すれば、取りあえずなんとかなる。
0565ハンチク
NGNGこんなくらいの意味?もっとやっこしーの?
select a.own, a.child, a.ptn
from tableA a, tableB b
where a.own = b.item(+)
and a.ptn = b.ptn(+)
order by a.own,NVL(b.ptn,99999),a.child
こんな結果でる(ownに条件つけりゃ・・)
own child ptn nullcvt
A_1 B_1 000 000
A_1 B_2 000 000
B_1 C_1 111 111
B_1 C_2 111 111
B_2 C_3 444 444 <こいつがほしいんかい?
B_2 D_1 333 99999 <これより先に
B_2 D_2 333 99999 :と思ったが・・
0566ハンチク
NGNGしかし、ほんとの問題は条件1じゃない?
データ次第じゃあ、無限参照有り+重複参照有り、でしょ?
テーブルAのテーブル仕様(論理的に)が面倒そう・・
0568561
NGNG>566
テーブル仕様については論理的には問題がないようになってます
無限参照になるようなデータは存在しないです
引っ張り出すソート順なんですが
Start withで参照した順番を基準にしたいんです
テーブルAをstart with 「A1」で引っ張ると
親(PK) 子(PK) パターン(PK)
----- ------ ----------
A_1 B_1 000
B_1 C_1 111
B_1 C_2 111
A_1 B_2 000
B_2 D_1 333
B_2 D_2 333
B_2 C_3 444
C_3 D_1 555
C_3 D_2 555
こんな感じになりますよね?
例えが悪かったのですがパターンについては必ずしも
数字ではないので・・・
要するにBテーブルを参照して優先パターンを保持している
アイテムがあった場合(この場合B2)B2のptn444以下の全構成を
先に出してもって来たいのです(説明苦手で分かりづらくてすまん・・・)
要するに結果はこんなソート順にしたい
親(PK) 子(PK) パターン(PK)
----- ------ ----------
A_1 B_1 000
B_1 C_1 111
B_1 C_2 111
A_1 B_2 000
B_2 C_3 444 \
C_3 D_1 555 ここと
C_3 D_2 555 /
B_2 D_1 333 \
B_2 D_2 333 /この部分が入れ替わる
勿論これは簡略した例えであってテーブルAにもっと多数のデータが存在した
場合全てのデータにおいて優先ptnの判別は行われなくてはならない
SQL一発では無理な気がしてきてしまった今日この頃・・・
申し訳ない よろしくお願いします
0569ハンチク
NGNG仮にchar(4) とした場合 NVL(xx,'zzzzz')
全角とかあってややこしいなら NVL(xx,'') で 逆順ソート。
0570ハンチク
NGNGんでロジックなんやけど、
1. A_1 B_1 000 <- これを読んだ後、
2. B_1 C_1 111 <- は新しい読み込みがいらんか?
3. C_1 D_1 xxx <- さらに新しく読んで・・・
4. D_1 E_1 ooo <- この時点で E_1 が無いとしよう。
4の後に、3の次レコードをどうやってとってくるか?
また、その後2,1の続きをどうするか?
深さに制限がないなら、全部カーソル開けないし・・
現レコードを保持してて、次は「それ以後」を条件で再読み込み?
[ろじっく]
XR read -> A_1 B_1
XR sub -> B_1 C_1
__ B_1 C_2 ..end
_R read -> A_1 B_2
XR sub -> B_2 C_3
XR sub -> C_3 D_1
__ C_3 D_2 ..end
_R B_2 C_1
__ B_2 C_2 ..end
XR read -> A_1 B_3 ...
再起呼び出しモジュール編んで、「R」のたびにSQL発行,以外に思い付かない・・
深さが10くらいまでなら カーソル配列10もっとくけど・・
それでも「X」のたびに発行・・
自分、Unix-C( Pro-C )とVBでのOracle専門なんです。
PL/SQLってどこまでできるの?
嗚呼!最後がマジ質問になってしまった・・長くて失礼。
>567 居る? PL/SQLは任せた(w
0571デフォルトの名無しさん
NGNGそれを指定すると >>568 の順になるってのが、
どーやってもわかんない
0572デフォルトの名無しさん
NGNGStrat with は階層問い合せです
表が階層データを保持しているときに使います
Start with 句で階層問合わせのルート行を指定して
Connect By 句で 階層問合せの親子の関係を指定します
テーブルAの例の場合
SELECT 親,子,パターン
FROM テーブルA
START WITH 親='A1'
CONNECT BY PRIOR 子=親
でSQLを実行すると>578の様な結果になります
0573デフォルトの名無しさん
NGNG失礼 >568 の様な結果だね・・・鬱だ
0574561
NGNG>570
専門外なのに手を煩わしてマジですまん
私もPl/SQL自体始めて半年も経ってないのであまり詳しくない・・・
でも見ている限りやはりワークテーブルが必要な感じがする
ロジック的に一行一行並べ替えるしかないんだろうか・・・
0575デフォルトの名無しさん
NGNG会員 サービス 開始日 終了日
(1) 山田 XXX 199501 199612 (過去会員)
(2) 山田 XXX 200101 200112 (過去会員)
(3) 山田 XXX 200201 200206 (現会員)
(4) 山田 XXX 200209 200303 (予約会員)
テーブルが上記のような構成の時、現行会員という条件で3番のレコードのみを抽出。
3番のレコードを持たないときに予約会員という条件で4番のレコードのみを抽出
3番、4番がないときに過去会員1,2番のレコードを抽出というようなことはできますでしょうか?
要するに定義は
現会員、 現在サービスを利用している人
予約会員 現在サービスを利用していないが将来会員になる人
過去会員 現会員でなく予約会員でもないが過去にサービスを受けたことがある人。
異なるレコードのフィールドが関わってくるのですがこのような抽出って可能でしょうか。
0576ハンチク
NGNGORACLEは一応専門(じゃないといけない・・w)
Start With (゚∀゚)!イイ
明日試す!
0577デフォルトの名無しさん
NGNGさんくす。へー、こんなのあるだ・・・知らなかった。
試してみたらホントにソートされて、ちょと感動。
でも、何に使うんだろう・・・
0578デフォルトの名無しさん
NGNG0579デフォルトの名無しさん
NGNG会員の「山田」とかサービスの「XXX」とかは検索条件に全く現れないわけ?
0580ハンチク
NGNGまず、ユニークキー項目がほしい。
次に、「現会員>予約>過去」の順にソートできるキーがほしい。
上記にて、 where key in (select max(会員種別) fro〜
が成り立つと思われますが、いかに?
案2
・現会員クエリ
・予約会員クエリ(現会員クエリの名前を除く)
・過去会員クエリ(現会員・予約会員クエリの名前を除く)
などを用意してつなげる
(たぶんめちゃ重い)
眠い・・明日もこのスレ、ROMにきま〜す(ROM?)
0581ハンチク
NGNGユニークキーいらんかった・・
key -> 会員種別
・・鬱だ、おやすみなさい
0582デフォルトの名無しさん
NGNG月次締め処理みたいなのを作り
現会員に1
予約会員に2
過去会員に3
ってフラグをふりソートするってのはどう?
テーブルの定義に疑問が残るが
UNIONの連続でも似たような事は出来るぞ
0583デフォルトの名無しさん
NGNGあんまり投稿がながくならないようにと必要十分なものをと思ったのですが
もちろんフィールドも絞込条件もほかにたくさんあるのですが躓いているところは
会員 サービス 開始月 終了月
山田 プール 199901 199912 #1
山田 プール 200101 200106 #2
山田 プール 200201 200206 #3
山田 プール 200209 200203 #4
山田 ジム 200201 200206 #5
山田 ジム 200209 200203 #6
佐藤 プール 200209 200203 #7
佐藤 ジム 200201 200212 #8
スポーツジムの会員リストのようなものです。
現会員 現在サービスを受けている人
予約 現会員でなく未来にサービスを持っている人
過去 現会員でも予約会員でもない人
上記のような場合たとえば今日200203の現会員の抽出で3, 5, 8のレコードを抽出したい。
山田さんも佐藤さんも現会員なので予約、過去リストには出てきません。
やはり地道に予約のときは現会員を消す、過去会員は現会員予約会員を消すという方針でいこうと思います。
おっしゃるようにめっちゃ遅くなりそうですが、、、。
0584デフォルトの名無しさん
NGNGひとつのテーブルがあって、そこから現会員リスト、予約会員リスト、過去会員リスト
をそれぞれ出力したいってことかな。
BETWEEN とか LEFT JOIN とか組み合わせれば普通のクエリーでさっくり取り
出せそうな *気が* するけど。どんなのを試した?
0585デフォルトの名無しさん
NGNG結局テーブルはさわらずに過去、予約出力の際、現会員でもあるときは処理をとばす
という風にして対処しました。レスを下さった方々ありがとうございます。
>BETWEEN とか LEFT JOIN とか組み合わせれば普通のクエリーでさっくり取り
>出せそうな *気が* するけど。どんなのを試した?
私もはじめはそんな*気が*したのですがたとえば585のようなテーブルの時に現会員を抽出使用とすると
1, 2, 3, 4 => 3 ; 5, 6 => 5; 7, 8 => 8
の3本のレコードにしたいのですがこれが過去、予約になると全部消えちゃうことになる
というあたりで挫折しました。
0586デフォルトの名無しさん
NGNGSET Count = ( SELECT COUNT(*)
FROM 表2
)
表1のCountフィールドに表2のレコード数を
アップデートしたいのですが、このままだと
オーバーフローしそうなので99999より大きかったら
99999を記録したいです。
どうすればOKですか?
おしえて。
0587デフォルトの名無しさん
NGNGORACLE限定、しかも動作は保証しないが
UPDATE 表1
SET Count = ( SELECT DECODE(SIGN(COUNT(*) - 99999),1,99999,COUNT(*))
FROM 表2
)
でいくと思う・・・多分
0590デフォルトの名無しさん
NGNG0591デフォルトの名無しさん
NGNGツーか、マニュアル全部嫁。
0592デフォルトの名無しさん
NGNGありがと&スマソ。ざっと探しはしたけど見つからなかったので…。
0593デフォルトの名無しさん
NGNG↑と比べてどんなメリット(デメリット)があるのでしょう?
スレ違い?
0594デフォルトの名無しさん
NGNG思いつくままに列挙します(間違ってるかもしれませんが)
メリット
JAVA対応かな?<おおきなメリットとは思えない
INSERT時にORDER BYが使えた
デメリット
クライアントツールがWindows95にインストール出来ない
列挙しようと思ったがあまり思いつかなかった
0595デフォルトの名無しさん
NGNGこれは何の役に立つの?
0596デフォルトの名無しさん
NGNGINSERT に ORDER BY が使えると、
「とにかく入るだけデータを入れたい」って時には便利かも。
や、そんな場面があるかどうか知らないけど
0597デフォルトの名無しさん
NGNGinsert〜selectに限っての話じゃないんだけど、サブクエリ
(インラインビューと言った方が適切か?)でorder byが使えると、
rownum使って並び順に連番がつけることができたりする。
#「SQLで連番」は結構永遠のFAQだったりするよね
0598デフォルトの名無しさん
NGNGrownum以外にもnextval使用時も良いんじゃない
ほとんど一緒だけど
0600デフォルトの名無しさん
NGNGAテーブルとBテーブルがあります。
hoge_CDでマッチングしてBの条件にヒットしたらAのテーブルのデータを
削除するSQLが書きたいのですが、皆さんならどんなSQLを書きますか?
とゆうかそんなことって実際に出来るのでしょうか?
0601デフォルトの名無しさん
NGNG内容がいまいち理解できなかったけど
解釈間違い/DBの違いによる使えない構文があるかも知れないけど
1.delete a from TableA a, TableB b where a.hoge_CD = b.hoge_CD and b.条件 = ???
2.delete a from TableA a where a.hoge_CD in (select b.hoge_CD from TableB b where b.条件 = ???)
3.delete a from TableA a where exists (select * from TableB b where b.条件 = ??? and a.hoge_CD = b.hoge_CD )
このどれかちゃう?
やってることは同じだと思うけど
(確認してないから細かいツッコミしないでね)
0602デフォルトの名無しさん
NGNG実は誰も見てなかったら独り言みたいでハズかしいなぁー
なんて思ってました。
SQLっていろいろな使い方があるんですね。
もちっと勉強してみます。
ちなみに1で問題解決でした。
2や3も使えそうですが、未チェックです。
ありがとう
m(__)m
0603デフォルトの名無しさん
NGNG>1.delete a from TableA a, TableB b where a.hoge_CD = b.hoge_CD and b.条件 = ???
これだと なんとなく「TableB」からも削除されそうな気がして気持ち悪いのはオレだけ?
まぁ気持ちの問題だけどね(特にdeleteだから)
0604デフォルトの名無しさん
NGNGで、ちょっと質問。
Select
商品マスタ.商品コード,
商品マスタ.商品名称,
Sum(売上データ.売上金額)
From 売上データ
Left Outer Join 商品マスタ On 売上データ.商品コード = 商品マスタ.商品コード
Group By 商品マスタ.商品コード
この問い合わせがエラーになるのだよ。
商品名称に集計関数がついてないとか文句言われてね。
はぁ?って感じですよね。
ちゃんと商品マスタ.商品コードを主キーにしてるし。
売上データ.商品コードは外部キーになってる。
このクエリがちゃんと通るちゃんとしたRDBMSってないですか?
0605デフォルトの名無しさん
NGNGはぁ?は君です。
第三正規形とかご存じ?
0606デフォルトの名無しさん
NGNG第三正規形になってると思うんだけど???
商品マスタ
商品コード
商品名称
売上データ
売上日など
商品コード
売上金額
数量などなど
>>604のクエリが通らないのもはぁ?だけど >>605の書いてることもはぁ? だね。
0607デフォルトの名無しさん
NGNGSelect
商品マスタ.商品コード,
商品マスタ.商品名称,
売上データ.売上金額
From
(Select 商品コード,Sum(売上金額) From 売上データ Group By 商品コード) As 売上データ
Left Outer Join 商品マスタ On 売上データ.商品コード = 商品マスタ.商品コード
でいーじゃん。
0608デフォルトの名無しさん
NGNGあぁ、すまん。ちょっと問題を省略しすぎたな。
たしかに提示した質問の範囲では君の回答で良いと思うよ。
(サブクエリにするのは記述が冗長だが論理的できれいだね。)
だが、売上データに時系列項目(売上日付)があって
Group By 売上日付, 商品コード としたい時はどうしたらいいのかな?
(途中で質問に条件を付加するのは失礼だとは思うが、
実務で実際 遭遇しやすいケースだと思う。時系列と商品での集計)
やっぱり、Max(商品名称) を使いたくない場合は、
Select句に相関サブクエリを書くしかないのかな?
Select
商品コード,
(Select 商品名称 From ...),
Sum(売上金額)
From ...
「集合内の列値がすべて同じである場合、集計関数を使わなくても良い」という
データベースはないものかのぉ…。これって当然の欲求じゃないのかな?
0609デフォルトの名無しさん
NGNGすべてを書かないといけないんじゃないか?
俺はそう覚えていたけど?
0610デフォルトの名無しさん
NGNGSQL-92で書け。あいまい・・以下略(w
さぶっクエリーの何処が論理的できれいなんですか?
そんな物があること自体、RDBの。。つうかSQLの汚点。
おまえ、集計関数を使いたくない理由を明記して頂ければ幸いです。
0612デフォルトの名無しさん
NGNG>集合内の列値がすべて同じである場合、集計関数を使わなくても良い」という
>データベースはないものかのぉ…。これって当然の欲求じゃないのかな?
どっちにしろ一緒な事を記述しなきゃダメっしょ
「一緒だから勝手に集計しました」ってのも使いづらいと思うけど?
0613デフォルトの名無しさん
NGNG現在のデータベースで、
「Group By句にはselectする項目のうち、集計関数を使うもの以外の
すべてを書かないといけない」なんてことは分かってますよ。
でもさぁ、必然性のない集計関数を使わなきゃいけないっておかしいと思わない?
書き方を「覚えている」だけでは進歩しないと思うよ。
>>610
サブクエリがSQLの汚点というのは興味深いね。この話題とは
別に話をききたいな。サブクエリのどんなところがダメ?
こういった意見は聞いたことなかったので教えて欲しい。
この例で集計関数を使いたくない理由は…
「最大値が欲しいわけではないのに、集計関数Max()を使わなければいけないのは
とても気持ち悪いし、クエリの可読性をいちじるしく低下させている」からだよ。
>>612
なぜ、Group By に指定した列は集計関数を使わなくても良いのか?
…それは列値がすべて同じであることが明らかだからじゃないのか?
とすれば Group By にテーブルの主キー列をすべて指定した場合、
そのテーブルの列値はすべて同じであるわけだから、同様に
集計関数の使用を回避できてもいいんじゃないかってのがオレの疑問ね。
0614612
NGNGGROUP BYに付けられる構文が関係してるのかな?
having句があるからか?
ROLLUPがあるからか?
不確定予測でスマン
一見したときGroup byに項目たんないよ!言おうと思ったけど
結構、根深い疑問だったのね!
自分としても興味深いので、なんか教えてね
0615デフォルトの名無しさん
NGNG(1) 集計関数をトリッキーに使う max(商品名称)
(2) ひたすら列挙 Group By 商品コード, 商品名称, ...
(3) 相関サブクエリ Select (Select 商品名称 From ...) ...
(4) その他
0616デフォルトの名無しさん
NGNGこれって、もしかしてOracleだけかな?
0617デフォルトの名無しさん
NGNGで、この例の商品名称に相当する列番号を Group By に書くの?
であれば、いまの話題では (2) に含まれるんじゃないかな。
0618デフォルトの名無しさん
NGNGひたすら列挙するのが「気持ち悪い」という理由だから、
番号だと、多少気持ち悪さが緩和されない?
#緩和されないか(w
0619デフォルトの名無しさん
NGNG「GROUP BY句は、FROMとWHERE句の結果を使います。」らしい。
だいたい、テーブルの属性とSQLは関係ないんじゃないの?
SQLだけ見たら明らかに >>604 のは気持ち悪いよ。
0620デフォルトの名無しさん
NGNG0621デフォルトの名無しさん
NGNG「SQLだけ見たら…」というのには同意できないなぁ。
たしかに、あの問い合わせだけでは「商品名称」の列値がすべて同じであることは
分からないからよね。でも、SQLを書く人間と実行するエンジンには分かってるんじゃない?
たとえば、文字型にしか適用できない関数、数値型にしか適用できない関数が
存在するでしょ? それで人はテーブルの属性を知っていて適宜SQLを書いてるわけ。
つまり、「テーブルの属性とSQLは関係ない」とは言い切れないのね。
ところで、君のところではテーブルの主キーが
何かもわからないでSQLを書いてるわけ?
0622デフォルトの名無しさん
NGNG利用しているもの)の、データベースの諸準備するコマンド「initdb」で、
creating directory /var/pgsql... ok
creating directory /var/pgsql/base... ok
creating directory /var/pgsql/global... ok
creating directory /var/pgsql/pg_xlog... ok
creating directory /var/pgsql/pg_clog... ok
creating template1 database in /var/pgsql/base/1...
ってところで止まってしまうけど、これはどうにかならないんですかね。
0623デフォルトの名無しさん
NGNGそれは理解できるけど。
GROUP BYの問題はSQL文自体の構文的なエラー(論理的な矛盾)でしょ?
もし >>604 のようなSQLが可能だとしたら、そのカラムが必ず同じ値になることを
指示するための予約語も必要だと思う。じゃないとやっぱり気持ち悪いよ。
ちなみにデータ型はテーブルではなくカラムの属性。
いろんな例外を設けても話がややこしくなるだけで、
構造的な記述の原則を崩してまで実装する利点があるとは思われない。
>>604 の言うことは良くわかるし、誰もが一度は「ん?」と思った
事だろうとは思うが、SQL を習熟するうちに消化してしまっている
事だとおもう。
0625デフォルトの名無しさん
NGNG構文的なエラー(論理的な矛盾)というのがちょっと納得できないなぁ。
フィールドの型に合わない関数を使ってしまうというのも、
文脈を間違えているわけだから、構文的なエラーだと言えるよね。
(そして、文脈違いということはクエリからは読み取れないというのがミソだ)
それと、「同じ値になることを指示するための予約語」は必要ないと思う。
現在だってクエリからだけでは読み取れないさまざまな要素があるんだからさ。
さっき話した数値型にだけ適用できる関数もそうだよね。
それらの関数を使うときに、与える列の型が「必ず数値型である」ことを
示すための指示子を書くかい? 書かないだろう?
それは書いてる人は「数値型」だと知っているし、エンジンも実行時に検査を行うからだ。
つまりクエリを見るだけでは エラーが発生するかどうかは分からない、というのは今でも一緒。
Group By についても同じように実装できるはずじゃないかな。
クエリを書く人は「主キー列をすべて書く」という行為を考えて行うことができる。
エンジンはあるテーブルの主キー列がすべて Group By に指定されているか
検査することができる。ほら、同じように実行時エラーで対応できるじゃないか!
というか誰も現状の制限に不満を持っていないのかい?
・最大値が欲しいわけでもないのに Max() を使わなければならない
・集計軸でもない列をひたすら列挙しなければならない
0626デフォルトの名無しさん
NGNGSQLは理屈が単純なほど良い、というのにはちょっとだけ同意。
でもそれってアセンブラやCなどの低級言語と同じで文法仕様はすごく小さくて
すぐに覚えられるんだけど、ロジックを組むときにひたすらコードを
書かなきゃいけないってのと通じるものがあると思わない?
「最大値が欲しいわけでもないのに記述しなければいけないMax()関数」
「理屈の単純さ」というか「小さな文法仕様」によって、
使用者に不便を強いてるように思える。
そろそろ、使い手にやさしい構文拡張をして欲しいんだけどな。
このGroup Byの場合は、いままでの構文に影響を与えないから、
既存のコードはちゃんと動くんだしね。
ちなみに、SQLを見ただけでは構文としての正しさが分からないという意見が
あったけど、実はそうではなかった。
フィールドの型を「文字型」にするか「数値型」にするか…
テーブルの主キー列を何にするか…
これって以前にすべてSQL(DDL)でデータベースに伝えてたことじゃないか!
DDLも含めて適用したすべてのSQLの履歴を確認すれば、
文脈も含めた構文エラーはチェックできるんだよね。
前半部分に返信するが、それは SQL で吸収しなくてはならない事では無い
と思うよ。
0628デフォルトの名無しさん
NGNGCPUベンダーごとに命令が微妙に異なったり
特定CPUには特殊な機能があったり
歴史的事情がいつまでも尾を引いてたり
〜系、というのがあったり
アセンブラプログラマの皆様、ご苦労様です。
0629デフォルトの名無しさん
NGNGなるほどね。そういう考え方もあるだろう。
SQLをあくまでも低レベルインターフェイスとして位置付ける、という考えだよね。
でも、オレはSQLを十分な高レベルインターフェイスとして位置付けているんだ。
理由は…
(1) 各データベースでSQLが拡張された現在、SQL(ストアド含む)で実装できないビジネスロジックはほとんどない。
(2) SQLの上位層でSQL以上に論理的問い合わせを行えるものが存在しない(と思っている)。
ADOやJDBCなんかはSQLの問い合わせ結果をオブジェクトにマッピングして
操作できるという面で一部 SQLよりも高レベルインターフェイスと言えると思うけど、
結局、ADOもJDBCもデータ問い合わせには「生SQL」を使っているという現実がある。
で、その「生SQL」を書いているのは僕ら人間なんだよな。
>>627 はどんな手法を使ってるの?
もし高レベルインターフェイスでなにかを記述して、
それが勝手にSQLに展開される(Maxとか自動で付く)というのであれば、便利そうだ。
0631:
NGNG「生SQL」っていうのに同意。
ORACLEを使ったあと、ACCESSのテーブルやクエリを使うとなんか違和感があるがそ
のテーブルをSQLコードにするボタンを押すと、やっぱりSQL文がでてきて、「ああっ
やっぱりSQLなんだな〜」と思ってしまう。
0632デフォルトの名無しさん
NGNGWebObjectsではだめ?
0633デフォルトの名無しさん
NGNGWebObjectsはかなり評判いいみたいだね。
DBノウハウのスレでも、かなり高評価だ。
で、DBノウハウのスレを読む限り( それ以外 WOに関する知識なし )、
WebObjectsってフレームワークとして完成されすぎてる気がする。
UIからすべて持ってしまっているイメージを持っているんだけど。
汎用言語(Java, VB, VC)からWebObjectsとやらを利用して
アプリケーション開発ってできるの?
WebObjectsってインターフェイス(ミドルウェア)じゃないんじゃない?
0634デフォルトの名無しさん
NGNGオブジェクト指向を、非常にきれいな形で具体化した統合ソリューションだな。
誤解を恐れずに書くと、JBuilderとかForte for JavaみたいなIDEに、
DB連携可能なWebオーサリングツールと、RoseをわかりやすくしたRDBハンドリングツール、
運用環境を含めたイメージか。
・統合開発環境
・Java2対応
・開発用IDE
・分間50トランザクションまでの簡易運用環境(動作テスト用)
・JDBC2対応のRDBMSを自動解析し、Javaのオブジェクトにマッピングさせるツール(ビジュアルツール)
・DBと連携したWebインタフェースを作るためのビジュアルツール
(DB接続はDrag&Drop。フェッチ条件、ソート条件等諸々の設定をオブジェクトに埋め込める)
・負荷分散 / 障害復旧性を備えた運用環境
・同時アクセス数無制限の運用環境。Java2環境なら基本的になんでもOK。
・1サーバ1ライセンス。1CPUあたりなんてケチなライセンス形態無しの大盤振る舞い。
・負荷分散はWO任せ。わざわざ負荷分散を考慮したコード修正不要
・Webベースの運用ツールに、統計ツールなども含む。
・各種ウレームワーク
・WebObjects Framework:
1995年あたりから存在する、HTTPハンドリング用フレームワーク。
セッション制御とかも全自動。
・Foundation Framework:
コレクション系の処理が充実。すべてのフレームワークの基礎。
・Enterprise Object Framework:
NeXTSTEP時代から存在し、金融系システムなどで信頼性を磨いた、WOの神髄。
DBやLDAPなどのデータソースアクセスの効率化では、神の領域。SQL不要の開発が可能。
J2EEも.NET(比較対照としては不適切だが)も、これには遙かに及ばない。
これ使っちゃうと、SQLをWebテンプレートやロジックに埋め込んだり、セッション制御コードや
ページ遷移処理をゴリゴリ書くのがばかばかしくなってくる。
お値段は、ちょっと前までは\700マソだったんだが、今は1/100の\7マソ。
0635デフォルトの名無しさん
NGNGWebObject以外はあまり使ったことないんじゃない?
0636634
NGNGそれがな、期待を裏切って悪いんだが、
Perl->PHP->MS-ASP->ColdFusion->Servlet&JSP&J2EEと地獄を見てきた後に
たどり着いた結果なんだよね。
WebObjectsより優れたツールがあれば、すぐにでも乗り換えるけど、無いんだよな・・・
0637634
NGNG0638デフォルトの名無しさん
NGNGsage
0639デフォルトの名無しさん
NGNG目的に合わせてツールを選べ。
ただ正直、そろそろSQLゴリゴリからは解放されたいな・・・・・
0640デフォルトの名無しさん
NGNGtable_a カラ サイダイチ「update_dt」 ヲ センタク
0641デフォルトの名無しさん
NGNG開発言語とシームレスに融合する環境がいい。
OODBとか、いいと思うが、いかんせん実績が見えないんだよな・・・
0642デフォルトの名無しさん
NGNGそれに変わる手段ってありますか?
0643デフォルトの名無しさん
NGNGちょっと欲しいかも
0644デフォルトの名無しさん
NGNGexcept?
エクスポートのこと?
0645デフォルトの名無しさん
NGNG差演算。Oracleでいうとminus。
0646デフォルトの名無しさん
NGNGEnglishQuery?
0647604
NGNG一週間 九州出張行ってたんだけど あんまり盛り上がってないね。
>>634
WOの概要サンキュです。今ちょうどウェブフロントエンドの案件があるんで
WO考えてみます。
0648642
NGNGexceptに変わる演算子はないようなのでサブクエリでやった。
0649デフォルトの名無しさん
NGNG0650デフォルトの名無しさん
NGNGWOの開発って、WinNT/2K/XPでも可能だ。
Mac嫌いにもおすすめできる。俺もWinXPで開発。運用はSolaris。
ただ、開発環境のIDE自体は、Mac版のほうが充実してるんだよな・・・
0651デフォルトの名無しさん
NGNGうまい方法ってない?今やってるのがソートかけたものを一行Fetchする
やり方なんだけど、SQL一発でエレガントに取り出せないものかね?
8i以上ならサブクエリでORDER BYかけたものをrownum=1で
selectってできるんだけどさ。
0652デフォルトの名無しさん
NGNGORDER BYをrownumのやり方きぼん。
0653岸
NGNGhttp://www.h4.dion.ne.jp/~k.seed/
0654デフォルトの名無しさん
NGNG0655651
NGNGOracle8i以上
select *
from ( select *
from TABLE1
order by 更新日付 desc )
where rownum = 1
8はサブクエリでorder by が使えないので不可
0656デフォルトの名無しさん
NGNGそれ、普通に
select * from TABLE1 where rownum=1 order by 更新日付 desc;
ってするのと、また結果違うの?
0657651=655
NGNGrownum=1っていうのはorder byよりも前に評価されてしまうので、
必ずしもソートで一番上にきたデータとは限らないんだよ
0658デフォルトの名無しさん
NGNGなるほど。今、検証してみたけど、そうなのね。
ところで更新日付が最新って、仕様で制限が無ければ
複数件ヒットしてしまうような気がする。
そういう前提だったら、
select * from table1
where 更新日付 = (select max(更新日付) from table1);
とか。あんましエレガントじゃないねぇ。
0659651
NGNGあ、それもここにカキコする前に試してみた(笑)
けどやっぱり複数件とれちゃうでしょ?
余談なんだけどさ、DB自体は8i(8.1.7)なのよ。
んで、PRO*Cやってんだけどさ、PRO*Cのバージョンが
8.0.6なのよ。そんで8iから追加された機能がコンパイルのときに
エラーになっちゃうのよ。
本来使える機能が使えない歯がゆさったらないよ。
0661デフォルトの名無しさん
NGNG(SELECT MAX(更新日付) FROM TABLE1)
じゃダメなの?
0662651
NGNG> あ、同じく rownum=1 も追加ね。
あっ、それでいいのか!忘れてた・・・
> で、PRO*C だったらふつーに fetch するのが一番エレガントじゃぁ・・・
う〜ん、なんかfetchするのにループしないのが気持ち悪くて・・・
>>661
それ、658と同じだって(笑)
0663デフォルトの名無しさん
NGNGあったような気がする。このスレ的には邪道なんだろうけど(w
0664デフォルトの名無しさん
NGNG桁方向に並べ替えるにはどうすればよいのでしょうか?
0665デフォルトの名無しさん
NGNG桁方向ってあんた...。
0666デフォルトの名無しさん
NGNGワロタ。
0667デフォルトの名無しさん
NGNGまずは通常通り行方向に並べ替えて置いて、
おもむろにディスプレイを90度傾ける。
0668デフォルトの名無しさん
NGNG0669デフォルトの名無しさん
NGNG今度の Oracle は、COLUMN-ORDER BY 句が使えるよ。
詳細は、こっち → http://pc.2ch.net/test/read.cgi/perl/958633101/27
0670664
NGNGやってみます。ありがとうございました。
0671デフォルトの名無しさん
NGNGたとえば、
pg_dump dbname > name.out
とした場合、name.outにはdbnameのテーブルやデータ、スキーマ、
すべてが含まれているんですか?
もうひとつ、-tオプションでテーブルを指定して
そのテーブルのデータやスキーマを含めるには他にどんな
オプションが必要なのか教えてください。
初歩的な質問ですみません。
0672デフォルトの名無しさん
NGNGset sqlprompt "SQLキタ━(゚∀゚)━"
って書いてますか。
0673デフォルトの名無しさん
NGNGふつう。
set sqlprompt "C:\WINDOWS>"
では?
0674デフォルトの名無しさん
NGNGそれにするとSQLがきまくります・・・(泣
0675デフォルトの名無しさん
NGNGSQLサーバーでPostgres を使って時間を表示するのはいいのですが
'YY,MM'などの設定の仕方が良くわかりません。
ヘルプを見ても引っかからないので宜しくお願いします。
0676デフォルトの名無しさん
NGNGんで基礎的なことを学びたいんですが、
よいHPありますか?
0677oracleにて
NGNGテストと本番で変えるようにしたら
どっちがどっちだか分からなくなることがなくなったよ。
0678デフォルトの名無しさん
NGNGVBのFORMAT関数みたいな奴...
Google検索では複雑なストアド書いて対応している例しか見つかりませんでした。
SQLServer2Kです。
0679デフォルトの名無しさん
NGNGORACLEなら、lpadだったと思うけど
SQL鯖は無いんだよね
SELECT
CASE
WHEN LEN(no) = 1 THEN '0000' + no
WHEN LEN(no) = 2 THEN '000' + no
WHEN LEN(no) = 3 THEN '00' + no
WHEN LEN(no) = 4 THEN '0' + no
WHEN LEN(no) = 5 THEN '' + no
END
FROM TABLE
いちおうこんな感じで出来るとは思うけど(環境が無いので未確認)
現実的では無いよね!
0680しゅばい
NGNG変わるんですか?
AとBの表に品名という列があった時selectの所やwhereの所で書く時どっちでも良い
のですか?
0681デフォルトの名無しさん
NGNGhttp://www.mysql.gr.jp/を覗いてみてはいかがでしょうか?
まだ完全形ではないですが日本語訳ドキュメントがあります。
0682デフォルトの名無しさん
NGNGどっちでもいいよ。そのれべるの話なら。
実行計画とってみな。
0683デフォルトの名無しさん
NGNG昔のは、whereに複数条件が有る場合に
書く順番で速度は変わってたが、今では関係ない
>>682のアドバイスのように実行計画とって研究してみな
0684デフォルトの名無しさん
NGNG面倒な・・・・。
SQL Server は知らないけど、
Oracle風に言えば、substr('000000000000' || no, -8)
みたいな事が出来るんじゃないかな?
0685デフォルトの名無しさん
NGNGRight('00000000' + no, 9)
0686しゅばい
NGNGあとそれはどうやって克服したかも教えて下さい.
0687デフォルトの名無しさん
NGNGそんな事、忘れた(^^;
group by 周りは、ハマるんじゃないかなぁ。
俺は未だに update の構文があやふや・・・。
oracle , sybase ,informix .... 統一しろよ。
0688しゅばい
NGNG思っていますが,実際の所企業に就職するかそれとも派遣会社に行くか迷っています。
よいアドバイスがあれば聞かせてください.
あっそれと独学だとどこまで勉強したらよいのかわからないので学校に行こうかとも
思っています.学校だと求人も来ているかも知れませんし.
ちなみに自分は26歳です.
0689デフォルトの名無しさん
NGNGきくべし
0690デフォルトの名無しさん
NGNG0691デフォルトの名無しさん
NGNGかといって、26歳で経験ありませんってのもだいぶ怖い。
0692デフォルトの名無しさん
NGNGまず、フリーウェア作って公開しる!
そのことを面接のときにもアピール! 派遣先に行ってもアピール!
そしたら、技術面では問題なし。認めてくれるでしょう。
まぁ、現場では技術だけでは生き残れないけどね。
とりあえず、ODBCで利用できるクエリアナライザもどきでも書いてみたら?
現場行っても使えるツール持ってると、結構評価されるよ。
0693スレ主旨から外れるけど
NGNGって言うかさ、君はなんでデータベーススレとここで同じこと聞いてるのん?
まぁ、それは置いといてだね。年齢のこと考慮すると「学校に通う」選択肢は
キツイ。卒業する頃にはあなたより若い人と同列で品定めされるんよ?
勉強は職業人になったら終わりではないん。勉強せん人間は淘汰されるの。
そこんとこ加味して自分の進む方向を考えてみ?
0694しゅばい
NGNGプログラマーのみなさんの勤めている所ではそういう人間は今までいましたか?
0695デフォルトの名無しさん
NGNG俺はよく見てないが、マ板にその類のスレがあったはずなので
そっちを覗いてみるのはどうだろうか。
PGじゃないが、30才未経験でエンジニアを目指して
いた人(独学でMCSE取ってきた)は、10社くらい面接で
落とされたということらしい。
んで、俺の会社に拾われたんだが、技術系の職は
得られずに、いきなりPMやらされてる。
とはいっても、開発のPMじゃないがな。
あんまり書くと、ばれるかもしれんのでここら辺で・・・・・
0696678
NGNGおおっ、ありがとうございます。
がんばってストアド書いていたんですが、こちらの方が
シンプルなので使わせて頂きます。
>686
私もグループ化周りで混乱しました。
Accessのクエリビルダでデザインして、そこからどんなSQLが
生成されるのか、どんな結果セットが返るのかを何回も繰り返して
いるうちに慣れました。
0697デフォルトの名無しさん
NGNGクエリのSQLびゅー
0698デフォルトの名無しさん
NGNGA |1 |ああ|1 | 左のような表から
B |1 |いい|2 | 人=Bで区分ごとに値が一番小さいレコードの
B |1 |うう|3 | 区分・名前・値
B |2 |ああ|4 | |1 |いい|2 |
B |2 |いい|5 | |2 |ああ|4 |
B |2 |うう|6 | |3 |ああ|7 |
B |3 |ああ|7 | を取得するにはどう書けばよいのでしょうか?
C |1 |いい|8 | よろしくお願いします。
C |3 |うう|9 |
0699デフォルトの名無しさん
NGNG教えて下さい。
0700デフォルトの名無しさん
NGNGあまりにも長いと駄目なんでしょうか?
たとえば、一行をいっぺんにUPDATEしようとすると
更新されず小分けにするとOKなんです
>>699
SQLで検索しろ!
0701デフォルトの名無しさん
NGNGselect 区分, 名前, 値 from 表 where 区分 = 'B' and 値 = min(値)
group by 区分
0702デフォルトの名無しさん
NGNGselect 区分, 名前, 値 from 表 where 区分 = 'B'
group by 区分 having min(値) = 値
0703デフォルトの名無しさん
NGNGselect 区分, 名前, 値 from 表 where 人 = 'B'
group by 区分 having min(値) = 値
0704デフォルトの名無しさん
NGNG0706デフォルトの名無しさん
NGNGselect
a.人, a.区分, b.名前, a.値
from
(select 人, 区分, min(値) 値 from 表 group by 人, 区分) a,
表 b
where
a.人 = 'B' and
b.人(+) = a.人 and b.区分(+) = a.区分 and b.値(+) = a.値
0707698
NGNGでも速度はプログラム処理の方(意外と速かった)とほとんど変わらなかった・・・
まあ勉強になったので良しですね。
ちなみに人 = 'B' の条件を副問い合わせ部分に入れたりしてみました。
0708706
NGNG人、区分でグループ化した時、一つのグループのレコード数がかなり多くなる
ような場合じゃないと大して効果は無いかも。
あと、このケースの人 = 'B'はどの階層の副問い合わせに書いてもパフォーマンスは
変わらなかったりする。どこに書いてもインデックスが切ってあれば使ってくれるし。
オプティマイザって案外賢いんです。
0709
NGNGC言語の if 文のように、最初の A が合致したら B の判定はパスされますか?
つまり、合致する率の高い方から記述した方が効率は上がるのでしょうか?
0710デフォルトの名無しさん
NGNGテーブル名:TABLE_AAAA
分類A 分類B 値
----------------
001 0001 aa
001 0002 bb
001 0003 cc
002 0001 dd
002 0002 ee
002 0003 ff
003 0001 gg
003 0002 hh
この分類Aと分類Bのコードの関係は親子関係になっています。
このデータから、3レコード目のcc〜7レコード目のggまでを取ってくるSELECT文はどのように書けば
良いのでしょうか?
0711デフォルトの名無しさん
NGNG普通は、このような用途がある場合、分類Aと分類Bを分けずに1つにするのではないでしょうか。
select 値 from テーブル where 分類AB between 0010003 and 0030001;
もっとテーブル設計の勉強をして下さいお願いします。vvv
0712710
NGNGさよなら
0713デフォルトの名無しさん
NGNGSELECT
値, to_number(分類B*10000) + to_number(分類A) x
FROM TABLE_AAAA
WHERE x >= 001003 AND x <= 0030001
かな?
それからこのテーブルの主キー条件が不明瞭だが、
分類A+分類Bで主キーという事でいいかい?
0714仕様書無しさん
NGNG2chでわざわざ"さよなら"言う奴はめずらしいな。
0717デフォルトの名無しさん
NGNGOracleの場合、betweenはオプティマイザが
x >= 001003 AND x <= 0030001
に変換する、とマニュアルで読んだ覚えがあるけど。
0718713
NGNGストアドプロシージャにすると.......う、俺もよく分かってない。シッタカ君だったのか(萎え)
0719デフォルトの名無しさん
NGNG> だから変換する時間だけパフォーマンスが落ちるだろ。
それはそうだろう。だけどそんなのチューニングを語る上ではまあ微々たるものだと思うよ。
よほどオプティマイザの性能が低いってんならともかく。
0720あ
NGNG宣言できますが,もしchar,numberのようにバイトを指定しなかったとしたら
何バイトまで使えるのですか?
0721デフォルトの名無しさん
NGNG商品分類ごとに小計を出したい、ただし商品分類に属している商品名称が
ひとつの時は小計を表示しない(つまり明細が複数あるときだけ小計を出す)。
以下のような問い合わせを書きました。
Select 商品分類, 商品名称, 売上金額
From 売上データ
Group By 商品分類, 商品名称 With Rollup
Having Not (Grouping(商品名称) = 1 And Count(*) = 1)
これでうまくいったのですが、商品名称を商品コードにすると
小計が表示されませんでした。列の型が関係あるのでしょうか?
商品コードにすると With Rollup で生成された行に対する Count(*) が
常に 1 になっているようです。BooksOnlineを見ましたが、
Count(*) がどのような値を返すかは、記述してありませんでした。
どなたか分かる方いませんか?
0722デフォルトの名無しさん
NGNGそもそも、number(4)って 4バイトって意味なのか?
0723デフォルトの名無しさん
NGNGそれぞれのDB環境によって違うでしょう。
マニュアルで確認しよう。
0724デフォルトの名無しさん
NGNGvarcharと同じと考えるとそうかもね
ただ、number(4)だから
0から9999までの10進数しか扱えないと思われる
あくまでもいい加減な答えをしてみるテスト
0725デフォルトの名無しさん
NGNGoracleなら
charはchar(1)といっしょ
numberは小数点とかの位置、桁数がわからないとき
とかに使うんじゃなかったっけ。
ストアドの宣言ならテーブルの型使っとけ。
0726デフォルトの名無しさん
NGNGオラクルで、numberはnumber(38)のはず
バージョンによっては、違うのかもしれないが
0727デフォルトの名無しさん
NGNG精度・位取りを省略すると浮動小数点数扱いになるよ。
最大精度は確かに38桁だけどnumber(38)とは全く意味が異なるので注意。
0728726
NGNG嘘を言ってしまったようで申し訳ない。
なので、早速実験してみた。
R8.1.7 FOR WINODWS (OTN TRIAL版)
CREATE TABLE nichan(
FIELD1 NUMBER
);
SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH,DATA_SCALE
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'NICHAN';
TABLE_NAME COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_SCALE
------------- ---------------- --------------- ----------- ----------
NICHAN FIELD1 NUMBER 22
って、ここでつまってしまった・・・・・
テーブルの定義情報が書かれたディクショナリーって、
ほかに何かあったけか?
DATA_LENGTHはバイト数のような気がするので、
そこら辺の事を調べたらわかるのかもしれないが・・・・
領域計算の資料探せばわかるかな?
0729デフォルトの名無しさん
NGNGテーブルが1つに対してのGROUP BY節は出来るのですが、テーブルが2つになると
うまくできません。
どなたか分かる方いませんか?
0730デフォルトの名無しさん
NGNG・具体的なテーブルの構造
・最終的に欲しいデータ形式
・いま自分が書いているSQL
の3点を晒せ
俺もSQL勉強中だから一緒に悩んでやる(w
0731デフォルトの名無しさん
NGNGあとエラーメッセージを書け
どっちのテーブルの項目をGROUPしてるんだ
って単純な事だと思うが
0732729
NGNGTABLE ->受注
受注_支店番号|受注_部品番号|価格|リード・タイム|受注数
-------------------------------
51 |124 |25 |5 |400
51 | 125 | 0.55 | 5 | 0
51 |134 | 0.4 | 5 |500
51 |135 | 0.39 | 5 |1000
51 | 221 | 0.3 | 10 | 10000
51 | 231 | 0.1 | 10 | 5000
52 | 105 | 7.5 | 10 | 200
52 | 205 | 0.15 | 20 | 0
52 | 206 | 0.15 | 20 | 0
53 | 124 | 1.35 | 3 | 500
53 | 125 | 0.58 | 3 | 200
53 | 135 | 0.42 | 3 | 1000
53 | 222 | 0.25 | 15 | 10000
53 | 232 | | 15 | 0
53 | 241 | 0.08 | 15 | 6000
53 | 134 | 0.38 | 3 | 200
TABLE -> 支店
支店_支店番号 | 支店名 | 所在地 | 支店コード
---------------+----------------+---------------------------
51 | DEFECTO PARTS | 16 JUSTAMERE LANE, TACOMA WA | 20
52 | VESUVIUS INC. | 512 ANCIENT BLVD., POMPEII NY | 20
53 | ATLANTIS CO. | 8 OCEAN AVE., WASHINGTON DC | 10
54 | TITANIC PARTS | 32 SINKING STREET, ATLANTIC CITY NJ | 30
57 | EAGLE HARDWARE | 64 TRANQUILITY PLACE, APOLLO MN | 30
61 | SKYLAB PARTS | 128 ORBIT BLVD., SYDNEY AUSTRALIA | 10
64 | KNIGHT LTD. | 256 ARTHUR COURT, CAMELOT ENGLAND | 20
2つのテーブルを使って支店_支店番号を受注_支店番号に変えてそれをGROUP BY節
にする事です。
SELECT 受注_支店番号,支店名,所在地 FROM 受注,支店 GROUP BY 受注_支店番号;
以下のエラーが出ます。
ERROR:
Attribute 支店.支店名 must be GROUPed or used in an aggregate function
どなたか分かる方いませんか?
0733730
NGNGすまんが、何が言いたいのかよくわからん。
いま書いているSQL文を見る限り
select 支店_支店番号,支店名,所在地 from 支店
というSQL文と732の書いているSQL文は何も違わないきがする
テーブルを書いたのと同じように、最終的に欲しいデータを
(言葉でなく)データで書いてくれるのなら、もうちょい考えてみるぞ。
ひょっとして、受注のあった支店番号/支店名/所在地が欲しいのならば
select 支店_支店番号,支店名,所在地
from 支店
where 支店_支店番号 in (select distinct 受注_支店番号 from 受注)
で、出来るはずだが・・・・
むりやりgroup byを使うならば副問い合わせ部分を
select 受注_支店番号 from 受注 group by 受注_支店番号
にすればOKかな
0734デフォルトの名無しさん
NGNGむりやりやるなら>>731の例や
1.SELECT 受注_支店番号,min(支店名),min(所在地) FROM 受注,支店 GROUP BY 受注_支店番号;
2.SELECT 受注_支店番号,支店名,所在地 FROM 受注,支店 GROUP BY 受注_支店番号,支店名,所在地;
で出来ない訳は無い
ようは、グループ関数を使わない項目は、GROUP BYのリストに記述しなければならない
いちばん問題なのは、GROUP BYの構文を理解していないのだと思われる
0735ヤン
NGNGあれ、1番はできますか?min(所在地)だと出ない気がするんですが・・・。
合ってたら申し訳ありません.ふと思ったもので。
>729さん
group byを使う時は表示させたいもの(selectの所)にはグループ関数か
group byで指定したもの以外は入れちゃ駄目という決まりがあるのですよ.
グループ関数というのは知っているとは思いますが,sum,max,min等の事です。
しかし裏技としてgroup by で指定したものと直接関係のあるものはmin,max
などを使うと出来るのです.理由は長くなるので書きませんが。
例えば支店番号と支店名は直接繋がりがありますよね.こういう場合はmin,maxを
使うとよいというわけです. 読みズらい文章すみません.がんばってくだせえ。
0736ヤン
NGNGm01得意先、m02製品品目というテーブルがありこれらがそれぞれの品番という列で
参照整合性でつながっている場合,m01得意先を更新或いは追加した時
m02製品品目も変更されているのですか?
0737デフォルトの名無しさん
NGNGすべてのDBでは知らないが、ふつうはされない
0738デフォルトの名無しさん
NGNG最終的には、2つのテーブルを結合して1つのテーブルとして見る訳でしょ?
なら、両方が更新される必要は無いぞ。
逆に言えば、どちらも更新されなければならないなら正規化されていないという事に。
0739729
NGNG受注_支店番号 | 支店名 | 所在地
---------------+---------------+-------------------------------
51 | DEFECTO PARTS | 16 JUSTAMERE LANE, TACOMA WA
52 | VESUVIUS INC. | 512 ANCIENT BLVD., POMPEII NY
53 | ATLANTIS CO. | 8 OCEAN AVE., WASHINGTON DC
これをGROUP BY節で。
(なぜこれをしたいと思ったのは、2つのテーブルを使ってGROUP BY節文が出来るのか? と思ったからである)
SQLは一ヶ月前からはじめたので、GROUP BYの構文をあまり理解していない部分があると思うます。(ただいま勉強中である)
今いくつかSQL文が出ているのを試してみます。
0740デフォルトの名無しさん
NGNG> 結果を以下のようにしてみたかったの!
なら、>>733 で良いと思うが ?
GROUP BY って、グループ化して各々のグループに対して処理するもん
だよ。例えば、支店毎の売上を求めるなら...
SELECT 受注_支店番号,SUM(価格 * 受注数) AS 売上 FROM 受注
GROUP BY 受注_支店番号;
とかのように使う。(あってる ? 試してないからちと不安)
0741デフォルトの名無しさん
NGNGselect 支店_支店番号 as 受注_支店番号, 支店名, 所在地 from 支店
where 支店_支店番号 in ( select 受注_支店番号 from 受注)
0742デフォルトの名無しさん
NGNGSELECT DISTINCT 受注_支店番号,支店名,所在地 FROM 受注,支店
WHERE 受注_支店番号 = 支店_支店番号;
とかやるとやっぱり、遅いのかなぁ ?
0743デフォルトの名無しさん
NGNG支店_支店番号 as 受注_支店番号,
支店名,
所在地
from 支店
where
exists ( select 1 from 受注 where 受注_支店番号 = 支店_支店番号)
;
なんて書き方もあるけど、なんか余り意味の無いSQLだなぁ。
0744デフォルトの名無しさん
NGNGhaving に書いてよい事とwhereに書いてよい事は違うのですか?
0745デフォルトの名無しさん
NGNGクライアント:Win98 & Access2002(再配布版ADPファイル)
上記の構成でクライアントのADPファイルを立ち上げると、
NT等は直接サーバーに繋がってくれましたが、
Win98で試したところタイムアウトしてしまいます。
Win98にSQL Enterprise manegerをインストールし接続しようとしても、
タイムアウトではじかれてしまいます。
「接続」を手動で行うと接続できる為、認証等は間違っていないと思われます。
申し訳ございませんが、同様な現象があったことがある方、対処方法をご存知の方
助言を頂けないでしょうか よろしくお願いします。
0746745
NGNGOSに依存していると勘違いをしていましたが、
単に名前解決を行っていなかったのが原因でした。
お騒がせして申し訳ございませんでした。
0747デフォルトの名無しさん
NGNG感動をありがとう。
0748デフォルトの名無しさん
NGNGHavingはGroupBy後の結果のrowに対して条件判断
なのでたとえば
select employCode, count(*)
from employee
group by employCode
having count(*) > 100
は成り立つが
select employCode, count(*)
from employee
where count(*)
group by employCode
は成り立たない。おけ?
0749デフォルトの名無しさん
NGNGselect employCode, count(*)
from employee
where count(*) > 100
group by employCode
だ。
スマソ
0750@
NGNGしたいのですが,
select
m02製品品目.品番,
m02製品品目.品名
from
m02製品品目
where
not exists(
select
m02製品品目.品番
from
m02製品品目,t03出荷
where
m02製品品目.品番=t03出荷.品番); だとレコードがでないのです。existsを
つかって求めたいのですが,どこが間違っているのでしょうか?
0751デフォルトの名無しさん
NGNGだーかーら、何でExistsがそんなに好きなの?
select m02製品品目.品番, m02製品品目.品名
from m02製品品目
where m02製品品目.品番 not in(
select t03出荷.品番, count(*)
from t03出荷
group by t03出荷.品番
having count(*) > 0)<--これいらねぇな
0752751
NGNGうへ間違えた
select m02製品品目.品番, m02製品品目.品名
from m02製品品目
where m02製品品目.品番 in(
select t03出荷.品番
from t03出荷
group by t03出荷.品番
having count(*) > 0)
0753デフォルトの名無しさん
NGNGnot existsの中の、
m02製品品目とt03出荷のテーブルの結合意味ある?
select
a.品番,
a.品名
from
m02製品品目 a
where
not exists(
select
b.品番
from
t03出荷 b
where
a.品番=b.品番
しかしexists系は他に書き方が有るなら控えた方が良いよ。
テーブルが小さいうちは気にならないが、データが増えるとかなり遅いよ
0754@
NGNGデータを抽出する時などの際fromの所にはそのデータを抽出する際
(select,where,order,group by等の所に表名を書いた時)に使う表名
をすべて書くとを思っていたのですが、この考えは間違っているのでしょうか?
0755デフォルトの名無しさん
NGNG間違っている。貴方はエラーをおそれて副照会に表をつっこんだのだろうが、
せっかく主の表と副の表が結合していたところが、副の表同士の結合になってしまった。
0756名無しさん@お願いっぱい。
NGNGレコードにそれぞれ"3333"、"11111"、"222"が入っています。
これをORDER BY句でソートすると、当然
11111
222
3333
の順に並ぶのですが、これを、数値の小さい順
222
3333
11111
と並ぶようにするにはどうしたらいいんでしょうか?
0757デフォルトの名無しさん
NGNGOracle なら ORDER BY TO_NUMBER(HOGE)
Access なら ORDER BY Val(HOGE)
でいけるんちゃう?
SQL鯖は知らん。
0758名無しさん@お願いっぱい。
NGNG即レスありがとうございます
DBはローカルのParadoxテーブルです。
いま、ORACLEで試したところ、TO_NUMBER(HOGE)でうまく表示されました。
が、Paradoxではエラーになってしまいました。
0759デフォルトの名無しさん
NGNGテーブル A そのものを
この ID について降順に並び替えたものに書き換えたいのですが、
これは SQL 文の範疇でしょうか?
MySQL + PHP なのですが、実現する方法を教えて下さい。
0760デフォルトの名無しさん
NGNG一体何がしたいのだ?
表示するときにID順にしたいだけなら ORDER BY ID とかつけたらよろし。
0761デフォルトの名無しさん
NGNG降順だから
ORDER BY ID DESC
だべ
>>759
せめてSELECT文の基本構文くらい
マニュアルで調べろ
0762デフォルトの名無しさん
NGNGそれやるとINDEXが使われなくなる罠無い?
0763デフォルトの名無しさん
NGNG0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNG\ /
― ○ ― ^^
/ \ ^^
|
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ゚Д゚)っ< やっぱプログラマが一番使うんじゃねーのか
゚ ⊂ /\ \________
゚ 。 。 ゚ ソ ノ ゚ 。
⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒
⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒
0766デフォルトの名無しさん
NGNG主に業務システム構築っすね。
あとデータベース保守とか。
0767デフォルトの名無しさん
NGNG>>759は Order By field Desc くらいは知ってるだろ。
それで、「降順に書き換えたい」って言ってるから降順にしたものを
もとのテーブルに格納したいんじゃねーの?
で、結論はデータを突っ込んだ順序通りに Select されるとは限らないので、
毎回 Order By field Desc しなさいってこった。
0768デフォルトの名無しさん
NGNGテーブル=Excelのワークシート、と思ってる人にありがちなパターンかも。
RDBではそういう概念は無意味な事は周知の通り。
0769761
NGNGなるほどね!
テーブル全体って事ね
>>760の「降順」って言葉かあるのに
昇順でやってるからおもわず
んで関係ないけど、
SQL鯖ならクラスタインデックスを作成すれば
SELECTするときに必ず昇順にはなる
「create crasterd index」スペルは間違ってるかも?
0770デフォルトの名無しさん
NGNG最近のDBだとビューにもOrder Byが記述できるんで、
Order By 付きの更新可能ビューを書いといて,
それに対して、更新・参照するという手もあるな。
0771デフォルトの名無しさん
NGNGTable1(Suzuki)
Date Uriage
---------------
Table2(Sato)
Date Uriage
---------------
今SuzukiとSatoという2つのテーブルがあります。
それぞれ日付は連続していないで個人の売上があった日のみ登録してあります。
また、双方ともDate,Uriageというフィールドを持っています。
この両者を結合させて
Date Suzuki.Uriage Sato.Uriage
------------------------
という結果を得たい時に発行すべきSQL文を教えてください。
両者とも売上の無い日も空欄で良いので日付を連続して結果に返してほしいのです。
よろしくお願いします。
0772デフォルトの名無しさん
NGNGこの条件がある以上は、この情報だけでは...たぶん出来ないな
おれが技を知らないだけかも知れないが
縦方向に表示するためには、データの中に必ず無ければ出ないっと認識している
ようはカレンダーテーブル見たいのがあればOK
1ヶ月限定とかで、横に出すのは出来なくはない
TANTOU,1,2,3,4,5,6,7,8,9,10・・・・・・・
-----------------------------
Suzuki
Sato
みたいな感じで
0773デフォルトの名無しさん
NGNGそもそもそのスキーマおかしい。設計からやり直し。
そんでそのテーブル構成の結合構文では、>>771の意図している出力結果は出ない。
レポート用に日付を格納できるテーブルを作ってExcelで適当に10年分ぐらいデータ作って入れとく。
そんで次のSQL
SELECT Calendar.Date, Suzuki.Uriage, Sato.Uriage
FROM Calendar LEFT OUTER JOIN Suzuki ON Calendar.Date = Suzuki.Date
LEFT OUTER JOIN Sato NON Calendar.Date = Sato.Date
ORDER BY Calendar.Date
アバヨ
0774デフォルトの名無しさん
NGNG少なくとも使用DBくらい書けよ
0775デフォルトの名無しさん
NGNG使用DBはMSのSQLサーバです。
実は納期が一週間後なんです・・・
ところで、少なくともどちらか一方が売り上げた日を含む
レコードを作成する事はできますか?
Table1(Suzuki)
Date Uriage
---------------
1999/12/03 30,000
1999/12/05 23,000
1999/12/23 40,000
Table2(Sato)
Date Uriage
---------------
1999/12/01 50,000
1999/12/07 16,000
1999/12/30 20,000
だとしたら
Date Suzuki.Uriage Sato.Uriage
------------------------
1999/12/01 (NULL) 50,000
1999/12/03 30,000 (NULL)
1999/12/05 23,000 (NULL)
1999/12/07 (NULL) 16,000
1999/12/23 40,000 (NULL)
1999/12/30 (NULL) 20,000
このような結果を得たいのです。
0776デフォルトの名無しさん
NGNG泣きたいほど追い込まれている私ですがDBって面白いですね。
一応業務系PGを2年やっててDBに触った事がないって終わってますね(涙
0777デフォルトの名無しさん
NGNGSelect Suzuki.data, Suzuki.Uriage, Sato.Uriage
where Suzuki.Data = Sato.Date;
だとどういう結果が帰って来る?ほとんど素人だが採点頼む。
0778デフォルトの名無しさん
NGNGスリーセブン、くそっ!
0779デフォルトの名無しさん
NGNGたぶんダメ
select
Date,
CASE WHEN hito = 'Suzuki' THEN ISNULL(SUM(Uriage), 0) END SuzukiUriage,
CASE WHEN hito = 'Sato' THEN ISNULL(SUM(Uriage), 0) END SatoUriage
from
(
select 'Suzuki' hito, Date, Uriage from Table1
union all
select 'Sato' hito, Date, Uriage from Table2
) a
group by Date, hito
order by Date
こんな感じだと思う
0780デフォルトの名無しさん
NGNGなんでダメ?多分エラーにはならず結果は帰ってくると思うけど
これだと何が帰ってくる?
手元にSQLないからわからん
0781デフォルトの名無しさん
NGNGFROM が無いとか、Suzuki.Data などと言うフィールドは無いと言う
レベルのエラーは別として、鈴木さんと佐藤さんが同一日に売上を
上げたレコードだけ返ってくると思う。
0782デフォルトの名無しさん
NGNGなかなか779さんのSQLは複雑ですね。。。
さっぱり解かりません。
これから徹夜で勉強します。(涙
0783デフォルトの名無しさん
NGNGほぅ、勉強になった。サンクス
要するに鈴木さんと佐藤さんの2人とも売り上げた日のレコードしか返ってこないという事?
0785デフォルトの名無しさん
NGNGそうか、また勉強になった。サンクス
俺もデータベースの勉強するかな
0786仕様書無しさん
NGNG0787デフォルトの名無しさん
NGNG翔泳社の本で勉強したらオラクルシルバー落ちたので良くない本だと思います。
0788779
NGNGHito Date Uriage
-----------------
Suzuki 1999/12/03 30,000
Suzuki 1999/12/05 23,000
Suzuki 1999/12/23 40,000
Sato 1999/12/01 50,000
Sato 1999/12/07 16,000
Sato 1999/12/30 20,000
こうあって有るのがベスト?
まずサブクエリの中で、そういう風に作り替えてる
あとは、
1カラム目に日付
2カラム目に鈴木さんの売上
3カラム目に佐藤さんの売上
ってやってるだけっす
まぁ実際SQL文を出してワカランのなら
簡単には理解できないと思われます
あっ環境が無いので確認してないから、
間違えてるかも知れないけど
遠からずは無いと思う
頑張ってください
0789デフォルトの名無しさん
NGNG使えん。Oracle、SQLサーバマガジンの間違いじゃないのって言いたくなる。
これからDBはじめる初心者にはいいかも。
0790デフォルトの名無しさん
NGNG完全外結合が使えるデータベースならこれでいいだろ。
データベースがおちんぽで完全外結合ができないってんなら、
>>779 の方法使うのもひとつの手だと思う。
Select
IsNull(Table1.Date, Table2.Date),
IsNull(Table1.Uriage, 0),
IsNull(Table2.Uriage, 0)
From Table1 Full Outer Join Table2 On Table1.Date = Table2.Date
0791デフォルトの名無しさん
NGNG納期が迫っているのなら、SQL一発で抜き出すのは
ある程度のところで諦めて、何回かSQLを発行して
その結果をPG上でゴリゴリとくっつけるんだな。
パフォーマンスが悪くても、その機能が実装できないよりはいくらかましだろうて。
0792デフォルトの名無しさん
NGNGところで徹夜で勉強してわかったのか?
0793デフォルトの名無しさん
NGNGある人物が最高得点を取った科目数を出したいのですが、どのようにすれば
良いか教えていただけないでしょうか?
KAMOKU
CODE KAMOKU
0001 国語
0002 数学
0003 物理
0004 史学
POINT
CODE NAME KAMOKU POINT
0001 山田 0001 95
0002 遠藤 0001 85
0003 菊地 0001 60
0004 山田 0002 60
0005 遠藤 0002 90
0006 山田 0003 59
0007 遠藤 0003 70
0008 菊地 0003 95
0009 山田 0004 75
受験科目数は
SELECT COUNT(DISTINCT NAME) FROM POINT WHERE NAME = "山田"
でできたと思うんですが
最高得点回数についてどなたかアドバイスいただけませんか?
0794デフォルトの名無しさん
NGNG質問意味不明
出力結果求む
もちろんMAXでやれば良いんじゃない?
ってだけじゃ無いよなぁ
>>SELECT COUNT(DISTINCT NAME) FROM POINT WHERE NAME = "山田"
これだと必ず1になるんちゃう? DISTINCT いらないんちゃう?
0795デフォルトの名無しさん
NGNGFROM POINT
WHERE
( KAMOKU, POINT ) IN (
SELECT KAMOKU, MAX(POINT)
FROM POINT
GROUP BY KAMOKU
)
GROUP BY NAME;
こんなかんじ?
0796デフォルトの名無しさん
NGNGこれは構文エラーだべ
INは複数の項目は出来ないべ
意図としてることが合ってれば
SELECT NAME, COUNT(*)
FROM POINT p, (SELECT KAMOKU, MAX(POINT) POINT FROM POINT GROUP BY KAMOKU) a
WHERE p.KAMOKU = a.KAMOKU
AND p.POINT = a.POINT
GROUP BY NAME;
こうかな?
POINTって項目とテーブルに使われているのが気になるが
0797デフォルトの名無しさん
NGNG>>少なくともOracleは795-796両方OKだよ。
1) where exists (select ...)
2) where (col1, col2...) in (select ...)
は同じ結果を返すように作れるけど、2)の場合はサブクエリを先に評価
するようにオプティマイザを誘導できたりして、サブクエリで絞込みの大半を
行うようなケースで便利だったりする。
0798デフォルトの名無しさん
NGNG数値型のデータにTO_CHARを使用したところ、空白が混ざってしまいます。
例: TO_CHAR(1,'00000000') → 「 00000001」
みたいな感じです。
どなたか、原因と回避方法をご存知ないでしょうか?
0799デフォルトの名無しさん
NGNGTO_CHAR(1,'FM00000000')
ヘルプないのけ?
0800デフォルトの名無しさん
NGNG-------------
NO name
-------------
001 山田
002 山本
003 田中
-------------
--テーブルB--
-------------
NUM name2
-------------
555 よん
666 ご
777 ろく
888 なな
999 はち
-------------
を結合して
---------------------
NO name NUM name2
---------------------
001 山田 555 よん
002 山本 666 ご
003 田中 777 ろく
888 なな
999 はち
---------------------
という表を作成したい場合、
どのようなSQL文を作成すればよいのかわかりません。
キーがないので何をしたいのか意味不明かも
しれませんがどなたか教えてさい。
0801デフォルトの名無しさん
NGNG結合の意味知ってる?
0802デフォルトの名無しさん
NGNGすいません、理解できてないと思います。
ただ一時的にこういうこういう表を作成したいのですが
無理なんでしょうか???
0803デフォルトの名無しさん
NGNG教えてください。
GRANTやREVOKEってDMLですか?DCLですか?
本やWebサイトによって違っていてあれー?という感じです。
COMMITやROLLBACKもDCLの仲間になってたり、Oracleの本では
DDL・DML・DCLとは別にトランザクション制御文になってるし…
実際に使うときは区別したりしないのかなと思うのですが
どうも気になって…。
0804デフォルトの名無しさん
NGNGMSSQLServerにはDCLないぞゴラァ!(w
というわけでさ、MSの場合は GRANT/REVOKE をDDL扱いにしてますぞぃ
そもそも SQL/92規格にDCLって定義されているんだっけ?
0806デフォルトの名無しさん
NGNGオライリの本には
「SQL92ではSQLを大きくDML、DDL、DCLの3つのカテゴリに分けていました。(略)
SQL99では7つのCoreカテゴリがあり、SQLで利用できるコマンドの種類の
一般的な枠組みを提供しています」ってあるよ
ちなみに「DCLには権限関係のGRANTやREVOKEなどのコマンドが含まれています」
だってさ
0808デフォルトの名無しさん
NGNGでっかい図書館に行けばあるんかな?
0809デフォルトの名無しさん
NGNGbegin trans / commit trans / rollback trans
の事じゃ無いのか?
>>808
SQL92の本は売ってたよ(かなり前に購入した記憶あり)
DDL/DML/DCLの区別は
オラクルマスターのシルバーで必須っす
0810デフォルトの名無しさん
NGNG------------------
1 | Car | Skyline
1 | Food | Curry
2 | Car | March
3 | Car | Mini
3 | Sport | Baseball
4 | Food | Water
4 | Sport | Soccer
4 | Car | K-Truck
のようなテーブルから、
ID | Favortite | name | Favorite | name | Favorite | Name
--------------------------------------------------
1 | Car | Skyline | Food | Curry | |
2 | Car | March
3 | Car | Mini | Sport | Baseball
4 | Car | K-Truck | Food | water | Sport | Soccer
のように、ID1つに対し1行にまとめたいのですが、どう記述していいのかわかりません。
"Favorite"は最大3つとして、全員が入力していない可能性があります。
0811デフォルトの名無しさん
NGNGカラムへの展開はどうしてもデッドになるけど。
select
ID,
max(decode(Favorite, 'Car', Name, null)) FavCar,
max(decode(Favorite, 'Food', Name, null)) FavFood,
max(decode(Favorite, 'Sport', Name, null)) FavSport,
from tbl
group by
ID
みたいなかんじ。
0812810
NGNGできました。ありがとうございます。
Decode()が味噌だったんだ。と思ったらmaxもしなきゃ出力されないんですね。
で、うちはオラコーではないので書き換えてみました。
select ID_USER,
max(CASE
WHEN Favorite = 'Car' THEN Name
ELSE null
END) FavCar,
max(CASE
WHEN Favorite = 'Food' THEN Name
ELSE null
END) FavFood,
max(CASE
WHEN Favorite = 'Sport' THEN Name
ELSE null
END) FavSport
from t_favor
group by ID_USER
0813デフォルトの名無しさん
NGNG実務でもある程度は通用しますか?それともゴールドくらいきっちり持っていないと
駄目ですか?
0814デフォルトの名無しさん
NGNGらしい。私はシルバーしか持ってないけど。
0815デフォルトの名無しさん
NGNGそんなもんさ
アンタら資格にとらわれすぎ。。。とか言ってみる
0816デフォルトの名無しさん
NGNGしかし、一旦職場から離れると能力を評価する基準・売り込むツボとしては■は大切だといってみる
0817デフォルトの名無しさん
NGNG0818デフォルトの名無しさん
NGNGと、教えられる人間はいないのかね?最近は
>>815殿が述べている点については同意いたしまするよ
0819デフォルトの名無しさん
NGNGselect 'ABC&DEF' from dual;
みたいな事をやりたいんだけど、&を普通に表示する
にはどうすれば良いのでしょうか?
0820デフォルトの名無しさん
NGNG0821デフォルトの名無しさん
NGNGおお、なるほど。 chr(38) とかやってて助長だなぁ
とか思ってたけど、一文字だと普通に & で解釈される
のね。もっと単純に、オプションで&を解釈しないように
できればベストだけど、これでも良いや。
さんくす
0822デフォルトの名無しさん
NGNG0823デフォルトの名無しさん
NGNG0824デフォルトの名無しさん
NGNG以下のようなテーブルで、TYPEを条件に「犬猫ハムスター」「猿人」「象」というような結果を出したいのですが…さっぱり分かりませんでした。よろしくお願いします。
ANIMAL
CODE TYPE NAME
0001 A 犬
0002 A 猫
0003 A ハムスター
0004 B 猿
0005 C 象
0006 B 人
0825デフォルトの名無しさん
NGNGグループ(TYPE)ごとの連番があればなお楽
770くらいからのレスを読んでわからないなら
プログラムで書いた方がええと思う
0826デフォルトの名無しさん
NGNG--------+--------------------------------------
1 | いのうえようすいイノウエタロー
っつーのを
select id, translate(text,'いのうえようすい,'ほげほげ')
from song
where id = 1
ってやってもダメなんだけどポスグレに replace みたいな関数無いのかな?
文字列を置き換えるんじゃなく「文字列長」を置換するの!!
0827デフォルトの名無しさん
NGNG0828minamo
NGNG複数のテーブルに同じキーが指定してある状態で
各テーブルのデータが揃っていないデータを挙げよ。
というSQLを組みなさい。
0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNG本当に問題をだしているのですか?
知っている人に教えて欲しいのとは違うのですか?
0831デフォルトの名無しさん
NGNG0832デフォルトの名無しさん
NGNG一致するキーを条件に抽出するだけだろ。
0833デフォルトの名無しさん
NGNG「同じようなレイアウトのテーブルが複数あり、それぞれ
全フィールドを比較し一致しないレコードを抽出せよ」
じゃないの?w
0834minamo
NGNG商品テーブル(商品番号、商品名)
在庫テーブル(商品番号、在庫数)
というテーブルがあり、
商品テーブル
商品番号 商品名
100 RedHat Linux
200 Windows2000
300 WindowsXP
在庫テーブル
商品番号 在庫数
100 3000
300 2500
というデータがあるとき、各テーブルに共通しない商品番号 200 の商品だけを
抽出するSQLを組み立てる。
0835デフォルトの名無しさん
NGNG0836デフォルトの名無しさん
NGNGを探すクエリーを書くのに少々悩んでいます。
●データ定義
CREATE TABLE MyTable (
keyVal INTEGER NOT NULL,
datVal INTEGER NOT NULL
);
INSERT INTO MyTable VALUES ( 1, 1);
INSERT INTO MyTable VALUES ( 2, 2);
INSERT INTO MyTable VALUES ( 3, 3);
INSERT INTO MyTable VALUES ( 4, 1);
INSERT INTO MyTable VALUES ( 5, 2);
INSERT INTO MyTable VALUES ( 6, 3);
INSERT INTO MyTable VALUES ( 7, 1);
INSERT INTO MyTable VALUES ( 8, 2);
●操作
SELECT * FROM MyTable t1 WHERE NOT EXISTS (
SELECT * FROM MyTable t2 WHERE t2.keyVal > t1.keyVal
AND t2.keyVal < 7 AND t2.datVal < 3
)
AND t1.keyVal < 7 AND t1.datVal < 3;
●結果
KEYVAL DATVAL
============ ============
5 2
やりたいのは、keyVal < 7, datVal < 3 という条件を満たしつつ、
その中で keyVal が最大のレコードを取り出すという操作です。
上記の SELECT でちゃんと動きますが、
< 7 と < 3 の条件が NOT EXISTS の内外に二重に存在するのが
どうもスマートでないように思えてなりません。
何かもっとシンプルなやり方はないものでしょうか?
現在使用しているRDBMSはInterBase6です。
0837デフォルトの名無しさん
NGNG0838836
NGNGSELECT * FROM MyTable t2 WHERE t2.keyVal >= t1.keyVal
AND t2.keyVal < 7 AND t2.datVal < 3
);
この形に落ち着きました。
0839デフォルトの名無しさん
NGNG831が答え書いてるし、835が真実を語ってる
0840デフォルトの名無しさん
NGNGFROM 在庫 LEFT JOIN 商品 ON [在庫].[商品番号] = [商品].[商品番号]
WHERE ([商品].[商品番号] Is Null)
0841デフォルトの名無しさん
NGNG基 礎 じ ゃ ん
0842デフォルトの名無しさん
NGNGこっちの方が、きれいじゃない?
SELECT * FROM MYTABLE
WHERE KEYVAL IN (SELECT MAX(KEYVAL)
FROM MYTABLE
WHERE KEYVAL < 7 AND
DATVAL < 3)
とりあえず、ORACLEで確認したどす。
パフォーマンスはわかりません。
ちなみに、DBって何?
0843842
NGNGINはつかえんのか?
さすがにMAXは使えると思うんだが
0845デフォルトの名無しさん
NGNG内部で自動生成されてるからいらない説と
当然つくるべし説を聞いたことがあって悩んでいます。
0846デフォルトの名無しさん
NGNGまずほとんどのRDBMS実装では必要ありません。
「当然つくるべし説」をいっているやつはあやしい。
0847デフォルトの名無しさん
NGNG「当然つくるべし。まぁ、普通は自動生成されるけど。」
0848デフォルトの名無しさん
NGNGSQL Serverなら明示的に作る価値がある場合もある
でも、つくるべし説を唱えている大抵のやつは
index名を自分で決めた物にしたいから程度の
理由な気がする・・・・
0849デフォルトの名無しさん
NGNGPostgreSQL以外でもできますか?
これって標準SQLなのかな。
0850デフォルトの名無しさん
NGNG0851デフォルトの名無しさん
NGNGOracleでは確かできたよ。他は知らん。
0852851
NGNGついでにオライリ本みてみたけど、標準じゃないんじゃないかな。
0853デフォルトの名無しさん
NGNGSQL鯖は
「create table テーブル名 as select....」は出来ないけど
代わりに
「select 項目1, 項目2.... into テーブル名 from なんとか」
って書き方は出来る
0854デフォルトの名無しさん
NGNGオラクル8iで「access」という列名を含むテーブルを
作成しようとしたが、できなかった。
「access」のところで、「ORA-00904: 列名が無効です。」と出る。
なんで?
0855デフォルトの名無しさん
NGNGSQLの予約語だから。
selectって名前の列、紛らわしくて作らないし、作れないでしょ、それと同じです。
0856デフォルトの名無しさん
NGNGライバル商品だから。
というのは冗談でOracleの予約語でしょ。
0857デフォルトの名無しさん
NGNGどうしても作りたきゃ""で囲って下さい。
「create table TBL1 ("access" char(10))」 みたいな感じ。
ただし、こうするとselect時にも「select "access" from TBL1」みたいに
いちいち""が必要。
0858山太郎
NGNGつまり「AKUSESU]だよ。OK?
0860デフォルトの名無しさん
NGNGアンタ、気に入ったよ!
0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNG使い分けろ
0863デフォルトの名無しさん
NGNGMySQL
参照整合性制約やストアドプロシージャなんぞいらん
0864デフォルトの名無しさん
NGNGんな訳ねーだろ
0865デフォルトの名無しさん
NGNG0866デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1008316065/l50
で聞いてみたら?
そういえば、Postgreのスレってどこかにあるのか?
0867デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/php/989375812/
PostgreSQL or MySQL
http://pc.2ch.net/test/read.cgi/unix/955533785/
MySQLってどうよ
http://pc.2ch.net/test/read.cgi/tech/1008316065/
他にもあるかもしれないけど。
こう見てみるとDBの話題ってどこの板が最適なんだろうなぁ。
0868デフォルトの名無しさん
NGNGMySQL vs PostgreSQL
http://pc.2ch.net/test/read.cgi/php/989341364/
ちょっとずれるかもしれないけど
PHP + PostgreSQL
http://pc.2ch.net/test/read.cgi/php/983128806/
PHP + MySQL
http://pc.2ch.net/test/read.cgi/php/983250751/
0869デフォルトの名無しさん
NGNGselect replace(a,NULL,"mona") from table; みたいに。
事情があって、しばらく実験できません。
0870デフォルトの名無しさん
NGNG通常なら
select isnull(a,'moma') from table;だべ
0871デフォルトの名無しさん
NGNGダブルクォーテーションでくくんなよ。
SELECT case when a is NULL then 'mona' else a end FROM table;
0872デフォルトの名無しさん
NGNG今2つのテーブルがあるとします。
tableA
colA colB
---- ------
1 001
1 002
1 003
2 001
2 002
2 003
tableB
colC colD
---- ------
1 001
1 002
1 003
2 001
2 003
tableAにあって、tableBにないデータを取り出したいのです。。
(ここでは colAが「2」colBが「002」)
一応自分でもいろいろ考えてみたのですが、
・where (colA , colB) not in (select 〜〜)等、whereの後に複数カラムを指定できない。
・minus句が使用できない
という状態で行き詰まってます。。何か良い書き方ありますでしょうか。
Linuxでsybase-ase-11.0.3使ってます。よろしくお願いします。
0873デフォルトの名無しさん
NGNGselect *
from tableA a
where not exists(
select *
from tableB b
where b.colC = a.colA
and b.colD = a.colB)
0874872
NGNG0875デフォルトの名無しさん
NGNG番号 担当
10 担当
10 主任
10 課長
10 社長
ってセレクト文で書くと、select 番号、担当 from 表名でこの文を
10 担当 主任 課長 社長
ってな感じで出したいんですけどうしたらいいですか?
もしかしたら、言葉が足りないかもしれまが列で出てきたのを行であらわす方法
っていったほうがいいかもしれませんが、教えてください。
0876デフォルトの名無しさん
NGNGこの条件ではSQL一発では出来ない
よってプログラムでやった方が簡潔に行える
0877デフォルトの名無しさん
NGNG新しいレコードをinsertするときに、ユニークなIDを振るんですが、
このユニークIDを自動的に振ってくれるような機能はないですか?
それとも、そのテーブルをselectして、使われてないIDを自分で
探す必要がありますか?
0878デフォルトの名無しさん
NGNGデータベース Part2
http://pc.2ch.net/test/read.cgi/tech/1020158297/31-33
0879デフォルトの名無しさん
NGNGSQLを使ってはできないつーことですか?
0880デフォルトの名無しさん
NGNGrownumかrowidだな
select rowid , * from tableAとか
0881デフォルトの名無しさん
NGNGどうも教えてくれてありがとうございます。僕はオラクルしか
知らないんですが、これってオラクル以外でも使えるもの
でしたっけ?
ところで、普通それぞれのレコードにIDみたいなのふりますよね。
普通っていうか、それが一般的だと思ってたんですが。
でもそういうことをしないで、かわりにrowidとか使う、っていうのは
一般的なんでしょうか。
rowidとかそのまま使ったら、その行にあるデータが削除されて、
またそこに別のデータがinsertされたら、同じrowid使われちゃうん
でしょうか。だとしたらやばい場合ってけっこうありますよね?
0882880
NGNG>僕はオラクルしか知らないんですが、これってオラクル以外でも使えるものでしたっけ?
オラクルも知ってないんじゃ? rowidはオラクル固有です
一般的にはシーケンスを振ると思われます
IDENTITY(これはSQL鯖だけか?) nextvalなどでやるのだと思われます
手元にマニュアルが無いので調べようが無いですが
rowidはtruncateなどしない限りは、同一のは振られないはずです
最後に一言、キーワードを教えて貰ったら
ちょっとは自分で調べる癖をつけましょう!
0883デフォルトの名無しさん
NGNGお前、あほか? rowidについてはこいつの言ってることであってるじゃん。
なに怒ってんの?
>>881
お前さんの言うとおり。rowidをこういうときに使うのはやばい。
ある一点ではユニークだけど、時間軸で見るとユニークとは言えない。
0884880
NGNG>ある一点ではユニークだけど、時間軸で見るとユニークとは言えない。
自分でデリートしてインサートしたりして確認したことある?
かなーり繰り返さないと、その状況はあり得ないのでは?
怒ってんじゃなくて、教えてくんが好きじゃないの
>>878のリンク先で同じ事書いてんのに関わらず、わかってないのがな
0885デフォルトの名無しさん
NGNG別にOracle固有ってワケじゃないよ。
0886デフォルトの名無しさん
NGNGかなりレアケースでも絶対に起きないといえなければ使っちゃいけない。
0887デフォルトの名無しさん
NGNGそんなおまえさんにもキーワードを教えてあげよう。
PCTFREE/PCTUSED
かなーりとかいう、量(回数)の大小ではない。
タイミングの問題だ。
0888デフォルトの名無しさん
NGNGデータブロックのパラメータでしょ
簡単な説明だけど
PCTFREE:設定値に達した時に、そのデータブロックには挿入できなくなる
PCTUSED:PCTFREEに達したときにPCTUSEDまで空くまで、そのデータブロックに挿入できない
デフォルト値は忘れたが
ようは、データブロックの最大値(PCTFREE)に達して、
その中のデータの半分くらい削除(PCTUSED)したら一緒になる可能性がある
そこと関係があるとは気にしたことが無かったのは事実だけど
そんな事をことを言ったらシーケンスなども有限じゃん
そしたら論理削除フラグで付けるしかねーだろ
SQL文の事じゃないのでsage
0889デフォルト名無しさん
NGNG興味本位で聞く。
シーケンス最大値使い切れるか?
0890デフォルトの名無しさん
NGNG自分も使い切ったことはない
しかし>>886の意見だと
0891デフォルトの名無しさん
NGNGワクワク
0892デフォルトの名無しさん
NGNGPostgres にないのかな?
0893デフォルトの名無しさん
NGNG記憶域は有限なんだからどんな方法でID振ったところで
使い切る可能性は必ずある
0894デフォルトの名無しさん
NGNGだいたいは1000億年以上先だったりする。
0895デフォルトの名無しさん
NGNGハード&ソフトが進化してしまうよ
0896デフォルトの名無しさん
NGNG絶対使い切らないことは保証できるわな。
0897889
NGNG間違いないだろう。
時間軸でのソートも出来るし。
一年3200万秒もないんだから、事実上使い切るのは無理。
0898デフォルトの名無しさん
NGNG順序が作成されました.
0899デフォルトの名無しさん
NGNGこっちの説明に耳かしてくれて、シーケンス使えるのって
大体1/3くらいかなぁ。
0900デフォルトの名無しさん
NGNG日付型って有限なんじゃないの?<調べてないから予測
そんな事を言ったらDB設計自体できなくなるんじゃない
実際さ、クラサバが流行始めた6〜7年前に流行ったマシン構成で、
(PenProでHD10GでNT3.51でORA7.3くらいかな?)
いまも現役稼働してるのって数多くはあるとおもう?
多少はあるとは思うが、移行作業の計画があるとかじゃない
ようは>>895だな
0901889
NGNG連番を取る方法かぁ・・・。
簡単な方法、思いつかないなぁ。
どなたか、簡単な方法があればご教授ください。m(_ _)m
0902デフォルトの名無しさん
NGNG質問の意味が良くワカラン
CREATE SEQUENCE じゃないんの?
話の流れからだと空き番号を見つける方法を聞いてるようにも思うので
select a.recnum from
(select rownum recnum, seq from Table order by seq) a
where a.r <> a.seq
and rownum = 1
もしくは
select min(a.recnum) from
(select rownum recnum, seq from Table order by seq) a
where a.r <> a.seq
こんな感じなんじゃないかな?
0903デフォルトの名無しさん
NGNGwhere a.r <> a.seq → where a.recnum <> a.seq
0904889
NGNGすまんね。質問しなおす。
「連番を確実に取る方法を教えて下さい」。
です。以上。
0905デフォルトの名無しさん
NGNGんじゃシーケンス以外なら
select max(seq)+1 form TableA
じゃないのか?
0906889
NGNGえ〜とゴメンなさい。説明が足りませんでした。
その連番を後々INSERT文でキーとして使う場合を想定してください。
シーケンス使っちゃ連番にならないしなぁ・・・。
どうやるんだろ?
0907デフォルトの名無しさん
NGNG連番 (=番号が飛んでいない) じゃないと嫌だってさ。
0908デフォルトの名無しさん
NGNG削除する時に本当にレコードを削除しないで、削除フラグだけ立てとく。
インサートする時まず削除フラグが立っていてシーケンスが最小のものが
あったらそのレコードを書き換える。
削除フラグが立っているレコードが無ければ、本当にインサートする。
って言うのはどう ?
0909デフォルトの名無しさん
NGNG組み合わせたら出来るじゃないの?
insert into TableB values(seq)
select nvl(min(a.recnum), select max(seq)+1 form TableA) seq from
(select rownum recnum, seq from TableA order by seq) a
where a.recnum <> a.seq
未確認だからどうかワカランが!
0910デフォルトの名無しさん
NGNG構文的に間違ってた!
適当に解釈してください
0911889
NGNG適当に解釈したけど、こういうこと?
create table test
(
num number primary key,
other varchar2(10)
);
insert into test (num,other)
select
nvl(max(num)+1,1) new_key,
'適当' new_val
from test;
読み取り一貫性を考えると
ちょっと不安、このSQL。
経験者の方、お力添えをお願いします。
0912889
NGNG宜しくお願いします>ALL
0913デフォルトの名無しさん
NGNG後から連番を埋めることに、どういう意味があるんだろう。
0914909
NGNGselect
nvl(min(a.recnum), select max(seq)+1 form test) num,
'適当' other
from
(select rownum recnum, num from test order by num) a
where a.recnum <> a.num
こんな感じじゃない
0915デフォルトの名無しさん
NGNG0916デフォルトの名無しさん
NGNG0917デフォルトの名無しさん
NGNG0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNG最初からテーブルロックしとくのが一番安全だと思うよ。
別トランザクションが直前にINSERTしてたときは、そのトランザクションが
完了するまでロックされるし、COMMITした場合は一意制約に違反するから
INSERTに成功するまで繰り返さなきゃならない。
0920889
NGNGnvl関数にSelect文って使えるんですか?
>>916
なんでも有りって事でお願いします。
>>919
ありがとうございます。勉強になります。
これなら連番を確実にとれますね(^^
create table test
(
num number primary key,
other varchar2(10)
);
LOCK TABLE test
IN EXCLUSIVE MODE ;
insert into test (num,other)
select
nvl(max(num)+1,1) new_key,
'適当' new_val
from test;
0921デフォルトの名無しさん
NGNGそれだとシーケンス使うのと一緒だべ
0922919
NGNG違う。シーケンスだと値が飛ぶ可能性が高いが、
最大値を使えば既に飛んでない限り飛ばない。
0924889
NGNGロールバック・コミットを併用したときも
一緒ですか?
>>923
すみません、>>901の時点でLOCK TABLEを知らなかったものですから。
>>905では、ロックの処理がないため
>>920と同じ内容を指してるとは思えなかったんですよ。
レスありがとうございます。(^^
0925デフォルトの名無しさん
NGNGFROM 業務 AS A , 商品 AS B
という風に使用したテーブルに順にABC…とふっていく
ヤシがいます…
なんと言ってやればいいのでしょうか?
0926デフォルトの名無しさん
NGNG几帳面でよろしい。
0927デフォルトの名無しさん
NGNGよろしくない。
SELECT文も、場合によっては100行を超えるときもある。
後から読むと、ASなんか使うなってよってよく思う。
0928タスケテ
NGNGTABLE1 TABLE2
+------+------+-------+ +-----+------+-------+
| KEY1 | KEY2 | NAME | | ID1 | ID2 | VALUE |
+------+------+-------+ +-----+------+-------+
| 100 | 100 | hoge | | 1 | 1 | ○ |
| 200 | 1 | A | | 2 | 2 | ○ |
| 200 | 2 | B | | 3 | 3 | × |
| 200 | 3 | C | +-----+------+-------+
| 200 | 4 | D |
+------+------+-------+
Oracle 8i でのSQL
SELECT
TABLE1.KEY2, TABLE1.NAME, TABLE2.VALUE
FROM
TABLE1, TABLE2
WHERE
TABLE1.KEY1 = 200 AND TABLE2.ID1(+) = TABLE1.KEY2 AND TABLE2.ID2(+) = 2
ORDER BY
TABLE1.KEY2
抽出結果
+------+------+-------+
| KEY2 | NAME | VALUE |
+------+------+-------+
| 1 | A | |
| 2 | B | ○ |
| 3 | C | |
| 4 | D | |
+------+------+-------+
これを PostgreSQL 7.2.1 用に書き換えました。
PostgreSQL
SELECT
TABLE1.KEY2, TABLE1.NAME, TABLE2.VALUE
FROM
TABLE1 LEFT OUTER JOIN TABLE2 ON (TABLE2.ID1 = TABLE1.KEY2)
WHERE
TABLE1.KEY1 = 200 AND TABLE2.ID2 = 2
ORDER BY
TABLE1.KEY2
抽出結果
+------+------+-------+
| KEY2 | NAME | VALUE |
+------+------+-------+
| 2 | B | ○ |
+------+------+-------+
しかし結果は上記の通り、外部結合できておりません。なぜでしょうか?
厨レベルでまことに恥ずかしい限りですが、どなたかお助けください。
0929タスケテ
NGNGOracle 8i から PostgreSQL 7.2.1 への移行ではまっています。
TABLE1 TABLE2
+------+------+------+ +----+------+-------+
| KEY1 | KEY2 | NAME | | ID1| ID2 | VALUE |
+------+------+------+ +----+------+-------+
| 100 | 100 | hoge | | 1 | 1 | ○ |
| 200 | 1 | A | | 2 | 2 | ○ |
| 200 | 2 | B | | 3 | 3 | × |
| 200 | 3 | C | +----+------+-------+
| 200 | 4 | D |
+------+------+------+
Oracle 8i でのSQL
SELECT
TABLE1.KEY2, TABLE1.NAME, TABLE2.VALUE
FROM
TABLE1, TABLE2
WHERE
TABLE1.KEY1 = 200 AND TABLE2.ID1(+) = TABLE1.KEY2 AND TABLE2.ID2(+) = 2
ORDER BY
TABLE1.KEY2
抽出結果
+------+------+-------+
| KEY2 | NAME | VALUE |
+------+------+-------+
| 1 | A | |
| 2 | B | ○ |
| 3 | C | |
| 4 | D | |
+------+------+-------+
これを PostgreSQL 7.2.1 用に書き換えました。
PostgreSQL
SELECT
TABLE1.KEY2, TABLE1.NAME, TABLE2.VALUE
FROM
TABLE1 LEFT OUTER JOIN TABLE2 ON (TABLE2.ID1 = TABLE1.KEY2)
WHERE
TABLE1.KEY1 = 200 AND TABLE2.ID2 = 2
ORDER BY
TABLE1.KEY2
抽出結果
+------+------+-------+
| KEY2 | NAME | VALUE |
+------+------+-------+
| 2 | B | ○ |
+------+------+-------+
しかし結果は上記の通り、外部結合できておりません。なぜでしょうか?
厨レベルでまことに恥ずかしい限りですが、どなたかお助けください。
0930デフォルトの名無しさん
NGNGバッチ用に書き込んでいます(マスタへの変更なし)
バッチ用
ID,変更フラグ,名前,情報1,情報2
マスタ用
ID,名前,情報1,情報2
最新の情報一覧を見たいので
バッチ用にIDがあればそのレコードのID,名前,情報1,情報2、
なければマスタ用のID,名前,情報1,情報2を
表示するにはどのようなSQL文をかけばよいのでしょうか?
0931928=929
NGNG正解
SELECT
TABLE1.KEY2, TABLE1.NAME, TABLE2.VALUE
FROM
TABLE1 LEFT OUTER JOIN TABLE2 ON (TABLE2.ID1 = TABLE1.KEY2 AND TABLE2.ID2 = 2)
WHERE
TABLE1.KEY1 = 200
ORDER BY
TABLE1.KEY2
0932デフォルトの名無しさん
NGNGSQL文が長くなりすぎてエラーとなってしまうのですが、
回避する方法はありますでしょうか?
(select * from AAAとすると、DATE型の書式を指定できない
ため以下のようにしてみました)
(SQL文)
select A001,A002,TO_CHAR(A003,'YYYY/MM/DD'),TO_CHAR(A004,'YYYY/MM/DD'),
A005,A006,(省略),A100 from AAA;
(テーブルのイメージ)
A001 CHAR
A002 CHAR
A003 DATE
A004 DATE
A005 CHAR
A006 CHAR
(省略)
A100 CHAR
0933デフォルトの名無しさん
NGNGテーブルの構造を変える。列数 100 なんて、常軌を逸している。
0934932
NGNG列数は、ちょっとおおげさに書きすぎました。
実際には、30〜40くらいなのです。
業務によって違うとは思いますが、列数は
どのくらいで設計すべきなのでしょうか?
0935デフォルトの名無しさん
NGNG30〜40でも多くない?なんか古いシステムからそのままフォーマット
持ってきて使っているのでは?どっかにテーブル仕様書アップしてみな。
明日まで暇なんで見てやるよ(親が危篤で田舎に帰ってきたが持ち直した
もんでねぇ。忌引が有給になってしまったい)
0936デフォルトの名無しさん
NGNGってのも本当だな
だから注意して見るしかない!
0937デフォルトの名無しさん
NGNGおかしくないか?
いま手元にあるテーブルの仕様書見ると余裕で50列とか70列
とかあったりするけど別にエラー起きてないし。
0938デフォルトの名無しさん
NGNG0939デフォルトの名無しさん
NGNG出力後のカラム名が、例えば「DECODE ( name, NULL, 'ななし', ・・・・・・ )」と長い文字に
なった場合エラーになることがあります。
SELECT ながーーーいカラム名 AS a FROM table
とかにすれば解決。
ところで、MicrosoftAccess2002のSQLで
大文字小文字を区別するのってどうやるの?
SELECT name FROM table WHERE name = 'nanashi'
で、nanashiはヒットさせたいが、NANASHIはヒットさせたくない
0940デフォルトの名無しさん
NGNGテーブルの列が多いのでは無くてSQL文が長いだけではない?
Viewを作るか集計用のテーブルを作っておくか考えたらどう?
0941デフォルトの名無しさん
NGNG0942デフォルトの名無しさん
NGNG0943KYO
NGNGSQLでつまってます。
select * from 受注テーブル where 受注番号 in (select 受注番号 from 受注テーブル where 商品コード='S001');
これを実行するとエラーになるんですが・・・
ちなみにWHERE句で書くと、同じ受注番号を持つ(ユニークキーではないので)ほかのデータが
表示されないのでだめなんです。
どうか助けてください。
0944デフォルトの名無しさん
NGNGとりあえずエラーメッセージくらい書けや
0945デフォルトの名無しさん
NGNGなんでサブクエリにしてるのだ?
inの中だけでいいんちゃう?
0946デフォルトの名無しさん
NGNGselect * from 受注テーブル where 受注番号 in
(select 受注番号 from 受注テーブル 受注テーブル2 where 受注テーブル2.商品コード='S001');
かな。あと、Oracleだったらテーブル名、カラム名をダブルコーテーションで囲む。
エラーメッセージがないからなあ。カーソルを使ってないで複数行帰ってきた、とか言ったら頃す(w
>>945
受注番号がユニークでない(明細行があるのかな?)って言ってるから外れだよな。
0947通りすがりの人。
NGNGちょっと脱線。
このSQLと何が違うの?
select * from 受注テーブル
where 商品コード='S001';
0948943
NGNGなんで違うのだ?>>947と同じ意味合いなんだが
>>select * from 受注テーブル where 受注番号 in (select 受注番号 from 受注テーブル where 商品コード='S001');
>>946でも良いのだが、普通書き換えるなら
select a.* from 受注テーブル as a , 受注テーブル as b where a.受注番号 = b.受注番号 and b.商品コード='S001';
でもいけるはずだ!しかし意味無いので
>>947と一緒でいけると思うが?
0949944
NGNGおまえらエロビデオのモザイクの中を想像する訓練が必要だな。
受注番号 商品コード
001 S001
001 S031
こーいうテーブルがあったら、おまえらのSQLじゃ1行目しか
検索条件に該当しないだろうが。
943は1行目と2行目を両方検索したいと逝ってるんだよ。
というか、943はさっさと詳細情報(エラーメッセージ、テーブル構造、etc..)を晒せ!!
気になるじゃねーかよ。
0950デフォルトの名無しさん
NGNGgroup byくらい使おうや
0951デフォルトの名無しさん
NGNG特にそのSQLは間違っていない。
使ってるDBは多分、サブクエリの使えないMySQL
じゃないのか?
MySQLなら、
>>948の
select a.*
from 受注テーブル as a , 受注テーブル as b
where a.受注番号 = b.受注番号 and b.商品コード='S001';
で正解のはずだ。
(>>948は何故か意味が無いと言っているが)
これはきちんと>>943のSQLが期待する結果セット
を返す。
0952通りすがりの人。
NGNGア、ナ〜ルほど。
失礼。失礼。
ミニモミ。でハァハァしてきますわ。
0953948
NGNG>>select a.*
>>from 受注テーブル as a , 受注テーブル as b
>>where a.受注番号 = b.受注番号 and b.商品コード='S001';
>>で正解のはずだ。
受注番号がユニークで無ければダメだな
きっと2件あったら4件でて来てしまうな
0954デフォルトの名無しさん
NGNG厳密には受注番号だけでなく
受注番号+商品番号でユニークの時に
重複検索されるのだが、
その場合は、distinctを付け加えれば
回避できる。
テーブルt1
C1 C2 C3 C4
10 1 S100 あああ
10 2 S101 いいい
20 2 S100 えええ
20 3 S100 けけけ
30 1 S103 かかか
select distinct a.*
from t1 as a ,t1 as b
where a.c1 = b.c1 and
b.c3 = 'S100'
でお望みの
C1 C2 C3 C4
10 1 S100 あああ
10 2 S101 いいい
20 2 S100 えええ
20 3 S100 けけけ
が検索される。
今、accessとDB2(という鬱DB)
しかないので悪いが、どちらも
確認済。
0955954
NGNG0956超弩級初心者
NGNGUPDATE TABLE SET SEQ = DECODE(SEQ, 2, 1, 1, 2)
WHERE ID1 = 10 AND ID2 = 100 AND SEQ IN (2,1)
ID1, ID2, SEQがユニークキーに指定されており、上記はOracleにて
SEQの1と2を入れ替えるためのSQLです。
Postgres(7.2.1)用に以下の通り書き換えました。
UPDATE TABLE SET SEQ = (CASE WHEN SEQ=2 THEN 1 WHEN SEQ=1 THEN 2 END)
WHERE ID1 = 10 AND ID2 = 100 AND SEQ IN (2,1)
しかし、「Cannot insert a duplicate key into unique index」とお叱りを受けました。
値が同時に入れ替えられず、「ユニークキーは重複できませんぜ、ダンナ」と言われているような感じです。
これを回避するにはどのようなSQLを書けばいいでしょうか?
私の頭では、SQLを3回に分けるといった非効率なものしか思い浮かびません。
どなたかエレガントなSQLをご教示くださいませ。
0957デフォルトの名無しさん
NGNGFROM うんこ
WHERE 食DATE=( CurrentDate( ) - Day(1) )
0958デフォルトの名無しさん
NGNG課すにはどうすればいいですか?
select * from (select * from TBL1 where 条件1) where 条件2
等と言った感じにするのですか?
0959デフォルトの名無しさん
NGNGwhere 条件1 『and』 条件2
0960デフォルトの名無しさん
NGNGユーザZでTable Aに更新かけられたとき、Table Bを更新するようなトリガーで
Table Bに更新権限がないってエラーになるんですけど、
Table Bに更新権限与えないとだめですか?
そういうもんですか?
Table Bに更新権限与えないでやる方法ないですかね?
0961960
NGNG0962デフォルトの名無しさん
NGNGpostgresは触ったことがないが、
この手の(隠蔽させる)方法として、
直接更新できないテーブルに対して
更新ストアドプロシージャを作成し、
そのストアドプロシージャに
更新させたいユーザに実行権限を
付与することで対応できると思う。
0963一緒に考えてくさい
NGNG条件分岐というのでしょうか?大きいほうの値を採用する方法と
from文のサブクエリを二つ平行につかう点が難点かと考えています。
後者くらいはうまくいきそうな気がするんですが、いまのところうまくいってません。
データベースはオラクルです。
具体的には…
データの格納されているテーブル
通貨 数量
USD 1000
EUR 500
EUR -1100
USD -800
USD 200
これを通貨毎・符号毎に集計して
A. select 通貨, sum(数量) from テーブル group by 通貨 having sum(数量)<0
B. select 通貨, sum(数量) from テーブル group by 通貨 having sum(数量)>0
通貨毎に絶対値の大きい符号の側を採用して、それらを合計する
select 最大値( abs( A.sum( 数量)), abs( B.sum( 数量))) from A, B where A.通貨 = b.通貨
ほしい結果は2300
0964デフォルトの名無しさん
NGNG過去にアクセスがなくその日初めてアクセスがあったユーザーの人数を知りたいんです。
1日 Aさん
2日 Bさん、Cさん
3日 Aさん、Dさん
4日 Aさん、Bさん、Cさん、Dさん
SQL文実行↓
1日 1人
2日 2人
3日 1人
4日 0人
かなり悩んでます。2ヶ月くらい
0965デフォルトの名無しさん
NGNGテーブルをALOGレコードを
DAY MEMBER
1 A
2 B
2 C
3 A
3 D
4 A
4 B
4 C
4 D
だとしたら
SELECT DAY, COUNT(*) FROM
(SELECT MIN(DAY) DAY, MEMBER FROM ALOG GROUP BY MENBER) SALOG
GROUP BY DAY.
でどうかな
>>963
Bank Of England方式ってなに?
サンプルデータ、どこをどう足しても2300にならないのだけど?
0966デフォルトの名無しさん
NGNG0967デフォルトの名無しさん
NGNG当初、私もMIN関数を使っていたのですが
データの件数のせいかもしれませんが
すべてのユーザーについて、MIN関数を使うとべらぼうに遅いです。
最小である必要はなく、過去にユーザーデータがあるかどうかをみて
あった時点でそのデータは数えない。
これですべての行を調べなくてもすむんじゃないかと思うのですが、
実際にSQLを書こうとすると、どう書いていいのか分からないのです。
0968デフォルトの名無しさん
NGNG2getしようとしてやめた記憶がある。
懐かしい。
0969デフォルトの名無しさん
NGNGこっちに統合しちゃっていいような気がする
http://pc3.2ch.net/test/read.cgi/tech/1020158297/l50
0970デフォルトの名無しさん
NGNG普通のRDBMSでは「数えない」なんて事が無理な以上、あなたの希望する事は無理。
0971デフォルトの名無しさん
NGNGOracleで、2つのテーブル間の差分更新をしたいと考えています。
具体的には、
テーブルfoo
ID C1 C2 C3
0 あ 111 AAAA
1 い 222 BBBB
2 う 333 CCCC
3 え 444 DDDD
テーブルbar (更新される側)
ID C1 C2 C3 C4
0 あ 111 AAAA あああ
1 い 222 BBBB いいい
2 う 888 CCCC ううう
3 え 999 DDDD えええ
(実際は、片方はDBリンクしているテーブルなので、こんな変な構造
なのです)
とあった場合、それぞれの行でC1,C2,C3を比較して、異なっている行
(例ではID=2,3)の値を、foo側の値で更新したいのです。
よろしくお願いします。
0972デフォルトの名無しさん
NGNG「ユーザが見つかった時点で処理終了 (次のユーザ処理へ)」 みたいなのは、SQLじゃ無理でないですか?
漏れはそういったSQL記述ができるRDBMS知らないです。 あるのかな?
RPGとかCOBOLなら書けますが、もしかしたら >>965さん のSQLの方が速いかも。
0973デフォルトの名無しさん
NGNG試してないけど
update bar(bar.ID, bar.C1,bar.C2,bar.C3) values(select foo.ID, foo.C1, foo.C2, foo.C3
from foo, bar
where foo.ID = bar.ID and
(foo.C1 != bar.C1 or
foo.C2 != bar.C2 or
foo.C3 != bar.C3)) temp
where bar.ID = temp.ID
って、どうだろう?
是非とも結果を希望!
0974デフォルトの名無しさん
NGNGそーいう時のためにストアドプロシージャという物がある。
OracleならPL/SQL、SQLサバならT-SQL
っていうか、group byで激遅なのはINDEXが
きちんと使えていない証拠。
(または、使えるINDEXが無い)
きちんと実行計画見たか?
RDBは何使ってる?バージョンは?
0977デフォルトの名無しさん
NGNGレス、ありがとうございます。
実はPHPをつかってデータベースと接続しているのですが、
IEの設定により、タイムアウトが5分に設定されています。
5分間レスポンスがないと、「サーバに接続できませんでした」と
表示されるのです。レジストリの変更により、この設定は変えられるのですが、
すべてのPCのレジストリを変更するのも大変だし、
実行するSQLも変動するので、あらかじめ作成しておくこともできません。
出力ページをリフレッシュすることで回避できるかもしれないので、
試してみます。
0978971
NGNGupdate (select foo.C1 foo_C1,foo.C2 foo_C2,foo.C3 foo_C3,
bar.C1 bar_C1,bar.C2 bar_C2,bar.C3 bar_C3,
foo.ID foo_ID,bar.ID bar_ID
from foo,bar
where foo.ID = bar.ID and
foo.C1 <> foo.C1 or foo.C2 <> foo.C2 or foo.C3 <> foo.C3 ) temp
set bar_C1 = foo_C1,bar_C2 = foo_C2,bar_C3 = foo_C3
where foo_ID = bar_ID;
だと、
『ORA-01779: 複数表にマップする列を変更できません』
でしたが、
UPDATE bar test
SET (C1,C2,C3) =
(SELECT C1,C2,C3
FROM foo
WHERE ID = test.ID AND
(C1 <> test.C1 OR
C2 <> test.C2 OR
C3 <> test.C3 ))
WHERE ID IN (
SELECT foo.ID
FROM foo,bar
WHERE foo.ID = bar.ID and
(foo.C1 <> bar.C1 OR
foo.C2 <> bar.C2 OR
foo.C3 <> bar.C3 ));
でうまくいきました。
0979973
NGNGうまくいって、よかったね。
というか、おれはなんというSQL文を書いていたのだろうか。
INSERT文とUPDATE文が混ざってるよ。。。。。
マジ、寝ぼけるのもほどがある。
鬱・・・
0980デフォルトの名無しさん
NGNGINTO :HAF.共通部.削除不可フラグ,
:HAF.共通部.システム日,
FROM HAFRDB.HAFTBL
という文があるのですが、この「:」は何を意味しているのでしょうか?
また、
WHERE 会社コード = :HAF.キー部.会社コード
AND 業務キー = :H業務キー
なんてのもあります。
参考書やネットで調べてみたのですが、わかりません…
どなたか教えてください。お願いしますm(_ _)m
0981デフォルトの名無しさん
NGNGよく解らんけど
select sum(数量)
from (
select 通貨,max(abs(数量)) 数量
from tbl
group by 通貨
)
じゃだめ?
>>964
Oracleは
select 日付,count(*)
from tbl a
where
not exists (
select *
from tbl b
where
b.名前 = a.名前 and
b.日付 < a.日付
)
group by 日付
とやった時は数えてないっぽいんだけど、一時表作るのと結合、
どっちが速いかってのは微妙だなぁ。>>965のが速い気がする。
>>978
DBリンク越しに結合すると強烈に遅いことが有るんで、全体に
占める更新対象の割合が小さい時は、絞込みに集合演算子使う
いいかも。
0982デフォルトの名無しさん
NGNG数値項目で値がNullの場合、自動的にゼロを取得するようにするには
どうしたら良いのでしょうか。
よろしくお願いします。
0983デフォルトの名無しさん
NGNG扱ってる内容が結構差別化されてるから分かれてた方がいいと思う。
というわけで誰か次スレ立てて〜
0984デフォルトの名無しさん
NGNGデータベース Part2
http://pc3.2ch.net/test/read.cgi/tech/1020158297/
0985デフォルトの名無しさん
NGNGNVL
0986982
NGNG0987デフォルトの名無しさん
NGNG向こうの内容は自分的には必要無いから統合したら読みにくくなりそうだな。
0988デフォルトの名無しさん
NGNGむしろ製品固有スレにブランチを希望するのだが。
現存するスレ:PostgreSQL, MySQL, Interbase(Firebird), Access
建立してない:Oracle, MSSQLServer(MSDE), DB/2
結局、SQLゆうても標準SQL(ANSI SQL/92か?)に基づいているわけではないし。
製品固有のキツイ方言混じりのSQL文見せられてもなぁ、って想いがあるわけで。
# そもそも、ここは宿題の単発質問スレを成り行きで消化してただけじゃない?
0989デフォルトの名無しさん
NGNG流れにまかせておけばいいんじゃない?
0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG現存するスレ
ORACLE & SQL Server
http://pc3.2ch.net/test/read.cgi/tech/1008908462/l50
ORACLE
http://pc3.2ch.net/test/read.cgi/tech/1010400855/l50
要するに、それなりに名前を聞くDBで個別スレが無いのはDB2だけだと。
もし次スレをたてるやつがいたら、ここら辺の関連スレの
リンクぐらいは張っておいて欲しいなぁ。
0992ペーパープラチナ
NGNG0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。