【帰ってきた】SQL質疑応答スレ 2問目

このエントリーをはてなブックマークに追加
902NAME IS NULL:2006/09/23(土) 22:52:08 ID:???
>>901
>この結果をさらにサブクエリーかCGIで

ん?where句に追加するだけじゃないのか?
SELECT t1.id1,t1.id2
FROM t1 LEFT OUTER JOIN t2 ON t1.id1 = t2.id1 AND t1.id2 = t2.id2
WHERE t1.id1 = 1 and t2.id1 is null;
質問の意味を読み違えてたらスマン。
903901:2006/09/23(土) 23:25:09 ID:???
>>902
普通にwhere句に追加するだけだったんですね・・・
WHERE t1.id1 = 1 and t2.id2 is null;
で望む結果が得られましたので、データを増やして検証してみます。
ありがとうございました。
904NAME IS NULL:2006/09/24(日) 00:04:18 ID:XMj5nZBr
MySQLにて、複数のレコードをINSERTするときはVALUES以降の値をカッコで
括ってカンマ区切りで複数レコードを並べることによってクエリ一発で出来るのですが、
UPDATEでも複数レコードをクエリ一発で更新することは出来るのでしょうか?

いろいろ調べたけど、1度に1つのレコードを更新する例文しか見つかりませんでした。
905NAME IS NULL:2006/09/24(日) 00:40:11 ID:???
わかんないけど、更新する値が複数あるってことは
where句も複数必要になるからその辺の関係でわ?
906NAME IS NULL:2006/09/24(日) 00:40:48 ID:???
あ、値じゃなくてレコードです。ゴメン('A`)
907NAME IS NULL:2006/09/25(月) 09:50:05 ID:???
>>904
同じ値に更新するなら複数選択される条件があればいい
違う値なら無理
908NAME IS NULL:2006/09/27(水) 09:25:43 ID:eq022I/L
古い順(ASC)で並んだ結果から最後の5行だけ取り出したいときってどうすればいいでしょうか?
いつもは全体の件数を取得->件数-5のオフセットで取得してるんですけど、2回もクエリ送るのが低効率な気がして。。
MySQL4.0なんでサブクエリ使えないんです。
909NAME IS NULL:2006/09/27(水) 10:34:38 ID:???
まず何故『新しい順(DESC)で取った最初の5行』にしないのだ
910NAME IS NULL:2006/09/27(水) 10:40:35 ID:???
そうすると
9
8
7
6
5
の順番で表示されるからです。
5
6
7
8
9
の順で行きたいんですけど。。
911NAME IS NULL:2006/09/27(水) 12:58:20 ID:???
可能ならプログラム側で逆にしたいところだな。
912NAME IS NULL:2006/09/27(水) 15:43:55 ID:???
まあ当然ではある
913NAME IS NULL:2006/09/27(水) 18:47:11 ID:???
え、4.0ってサブクエリ使えないの?
914NAME IS NULL:2006/09/28(木) 03:24:17 ID:???
4.1から。てかなぜ4.0?
915NAME IS NULL:2006/09/28(木) 12:12:58 ID:???
(……うちは3.0なので何も言わない……)
916NAME IS NULL:2006/09/28(木) 12:28:20 ID:???
(……言ってるじゃまいか……)
917NAME IS NULL:2006/09/30(土) 00:08:25 ID:???
イントラのWebでアクセス元のPCがどこの所属かを判定して表示内容を変える処理があります。
現在はポスグレでinet型をつかってますが、今度SQLServerにリプレースすることになりました。

現在のテーブル構成
bumon(int) | net_adr(inet)
------------------------
 1            | 192.168.1.0/24
 2            | 192.168.2.0/24
 3            | 192.168.3.0/24
 4            | 192.168.4.0/24

現在発行しているSQL
select bumon from table where net_adr>>=jspで取得したアクセス元のIP

新テーブル構成
bumon(int) | net_adr(varchar) | net_mask(varchar)
-------------------------------------------
 1            | 192.168.1.0        | 255.255.255.0
 2            | 192.168.2.0        | 255.255.255.0
 3            | 192.168.3.0        | 255.255.255.0
 4            | 192.168.4.0        | 255.255.255.0

SQLServerではinet型がないのでネットワークアドレスとネットマスクを別カラムで持つことになりました。
ここでどんなSQL文を書けば今までと同じ結果が取得できるでしょうか。
アクセス元のIPアドレスの取得方法は同じくjspです。 
918高木:2006/09/30(土) 12:04:52 ID:???
-- 給与が30万円以上で,部署名が研究開発の人の名前をON句を使って求める
SELECT
従業員名,
給与,
部署名
FROM
従業員 JOIN 部署
ON 従業員.部署NO = 部署.部署NO
WHERE
従業員.給与 >= 300000 AND
従業員.部署NO = 20;

従業員名 給与 部署名
---------- ---------- --------------
藤井 300000 研究開発
桜井 300000 研究開発

上記と同じ結果をサブクエリを使って求めたく思い
以下のSQLを発行したのですが、うまくいきません。
どこが拙いのかご教示ください。

-- サブクエリを使って、給与が30000以上で部署が研究開発の人を求める
SELECT
従業員名,
a.部署名,
給与
FROM
(SELECT
部署名,
部署NO
FROM
部署) a,
従業員
WHERE
給与 >= 300000 AND
a.部署NO = 20;

従業員名 部署名 給与
---------- -------------- ----------
藤原 研究開発 385000
高橋 研究開発 345000
藤井 研究開発 300000
林 研究開発 900000
桜井 研究開発 300000
919NAME IS NULL:2006/09/30(土) 13:10:59 ID:???
>>918
最後のWHERE句がおかしいと思われ

WHERE
給与 >= 300000 AND
a.部署NO = 部署NO AND
部署NO = 20;
920高木:2006/09/30(土) 13:50:14 ID:???
>>919
ありがとうございます。うまくいきました。
ただ、a.部署NO = 部署NO を a.部署NO = 従業員.部署NO としないと
「ORA-00918: 列の定義が未確定です」というエラーが起こりますが。
921NAME IS NULL:2006/09/30(土) 17:10:46 ID:???
>>920
レコード数が多い方をサブクエリにして先に絞り込んだ方が良いと思うけど
従業員数程度なら関係ないか

SELECT 従業員.従業員名, a.部署名, 従業員.給与
FROM
( SELECT 従業員名, 部署NO, 給与
FROM 従業員
WHERE 給与 >= 300000 AND 部署NO = 20 ) a,
従業員
WHERE a.部署NO = 従業員.従業員NO;
922NAME IS NULL:2006/09/30(土) 17:15:51 ID:???
>>918は間違い、適当に編集してたら混乱した

SELECT a.従業員名, 部署.部署名, a.給与
FROM
( SELECT 従業員名, 部署NO, 給与
FROM 従業員
WHERE 給与 >= 300000 AND 部署NO = 20 ) a,
部署
WHERE a.部署NO = 部署.従業員NO;
923NAME IS NULL:2006/10/01(日) 10:50:31 ID:???
<table1>
id | コード1 | コード2
--------------
1 | 1 | 3
2 | 2 | 3
3 | 1 | 1
4 | 2 | NULL

<table2>
コード | 商品
----------
1 | みかん
2 | りんご
3 | バナナ

から

1 | みかん | バナナ
2 | りんご | バナナ
3 | みかん | みかん
4 | りんご |  NULL

を取り出すのはどうしたらいいのですか。
table2を2回参照する部分がわかりません。
Mysql5.0 使用しています。
924NAME IS NULL:2006/10/01(日) 12:19:26 ID:???
>>923
select table1.id, a.商品, b.商品
from table1, table2 a, table2 b
where table1.コード1 = a.コード and table1.コード2 = b.コード
925NAME IS NULL:2006/10/01(日) 12:30:20 ID:???
メモリを節約したいならこうかな

select a.id, a.商品, b.商品
from
(select table1.id, table2.商品, table1.コード2
from table1, table2
where table1.コード1 = table2.コード) a, table2 b
where a.コード2 = b.コード
926NAME IS NULL:2006/10/01(日) 13:06:01 ID:???
これでメモリ節約になるDBMSって何?
927NAME IS NULL:2006/10/01(日) 13:34:04 ID:???
展開する手間を掛けさせてるだけのような希ガスる。
928NAME IS NULL:2006/10/01(日) 13:38:39 ID:???
DBMSの最適化機能でなんとかなるのかもしれんが
サブクエリに分けた方が扱う結果セットが小さくなるから
メモリは節約されると思うが
929NAME IS NULL:2006/10/01(日) 13:56:52 ID:???
Aテーブルに入っている文字列XがBテーブルで値Yを与えられているとき
BテーブルでYを持つAテーブルの文字列Xのみを取り出したいときはどう指定すればいいのでしょうか
例えばアルファベットで

<文字>
フィールド1|略|フィールド52
------------------------
a|略|Z

a〜Zまで文字列を入れてあり

<音>
フィールド|略|フィールド52
------------------------
母音|略|子音

母音か子音かの値を入れてあったとして
母音だけ取り出すときの指定です
930NAME IS NULL:2006/10/01(日) 14:13:29 ID:???
>>929
そもそもテーブル設計間違ってるぞ
文字と文字種のフィールドを持つテーブルが一つありゃいいんじゃないの?

a|1
b|2
:
z|2
931NAME IS NULL:2006/10/01(日) 14:26:53 ID:???
>>930
元々<文字>テーブル的なテーブル(ラテン行aとギリシャ行αを一緒の列に入れて対応させてるような感じ)がいくつかあったのですけど
そこから条件に合う一行の一部(ラテンの母音)を取り出すのにこういう形にしたのですが

やっぱり元テーブルから作り直す(ラテン文字と音テーブル、ギリシャ文字と音テーブルみたいに)方がいいですか
932NAME IS NULL:2006/10/01(日) 14:36:07 ID:???
>>928

>>924だろーが>>925だろーが、NestedLoopJoinに落ちるならどっちも
たいしてメモリ喰わんだろう。
つか逆に、最適化が下手なDBMSだと>>925はサブクエリの結果セットを
メモリ上にまるまる保持してしまう可能性があるんでない?
933NAME IS NULL:2006/10/01(日) 14:41:16 ID:???
>>931
それってめちゃくちゃ扱いづらいだろ
もともと同じ目的のものを別フィールドに52個も並べてるんだから

直せるなら直した方がいいんじゃないか
934NAME IS NULL:2006/10/01(日) 14:49:06 ID:???
>>931
直す場合のテーブルだけど文字ごとに分ける必要がないなら一つでいいと思うよ

|文字グループ|文字|音|

文字グループは{1ならギリシャ文字、2ならラテン文字}
文字は{A-Za-z後知らん}
音は{1なら母音、2なら子音}

こういうテーブルならたとえば「ギリシャ文字の母音を探す」なら

select 文字 from 文字テーブル where 文字グループ = 1 and 音 = 1;

ですぐもってこれる
935NAME IS NULL:2006/10/01(日) 14:54:18 ID:???
>>930
>>933-934
ありがとうございました
とりあえず直す方向でやってみます
936NAME IS NULL:2006/10/03(火) 02:31:14 ID:???
MySQLを使用しています。
同じ内容の行を削除する最もスマートな方法を教えてください
よろしくお願いします。
937NAME IS NULL:2006/10/03(火) 05:57:50 ID:???
>>936
そんな質問じゃ答えられんがな
仮にテーブル名t1、カラムはc1, c2, c3で、キーなし
重複行を削除という話だとしよう
キーがある場合はもう少し工夫が必要だが

1.別テーブルを作成
create table t1_tmp (select * from t1 group by c1, c2, c3);

2.作成したテーブルと交換
rename table t1 to ti_backup, t1_tmp to t1;

3.不要ならti_backupを削除

メリットは、結果を確認できることと、元に戻せること。
どうせこんなことやるのはメンテの時1回だけだろ
938NAME IS NULL:2006/10/03(火) 08:03:58 ID:???
>>937
超感謝、愛してるぜマイハニー
939NAME IS NULL:2006/10/03(火) 10:09:02 ID:???
A=1であり、『B=2 かつ C=3』でない
というWHERE文はどのようになるでしょうか?

WHERE A=1 AND !(B=2 AND C=3)
であってますでしょうか?
940NAME IS NULL:2006/10/03(火) 11:08:41 ID:Nw6npmkF
http://www.res-system.com/item/415

↑コレを、(副問い合わせではなく)値を明示して実現するにはどうすればいいでしょうか?
具体的には

key1|key2
----+----
A | 1
A | 2
B | 3
C | 1

というテーブルで、「A-3とB-2とC-1だけ検索したい」のです。
key1 in ('A', 'B', 'C') and key2 in (1,2,3)
だと、全部検索対象になってしまいますし……。お知恵をお貸しください。
941NAME IS NULL:2006/10/03(火) 11:10:32 ID:???
>>939
実際にやってみた?
WHERE A=1 AND NOT (B=2 AND C=3)
でどうか
942940:2006/10/03(火) 11:12:23 ID:???
↑若干間違いでした、すいません

誤:A-3とB-2とC-1だけ検索したい
正:A-2とB-3とC-1だけ検索したい

まぁ、引っかからないのは読み飛ばしたいので、別に間違いではないのかもしれませんが……。
943NAME IS NULL:2006/10/03(火) 11:20:06 ID:???
>>942
えっと、、、よくわからないが
WHERE (key1, key2) IN (('A',2),('B',3),('C',1))
とかでいいのかな?
944NAME IS NULL:2006/10/03(火) 11:23:41 ID:???
>>940
WHERE (key1 = A AND key2 = 2) OR (key1 = B AND key2 = 3) OR (key1 = C AND key2 = 1)

リンク先の方法がダメな処理系もあるな。例えばMSSQLにはINのサブクエリは1列だけの制限がある。
945940:2006/10/03(火) 11:34:42 ID:???
早速のお返事ありがとうございます。

>>943
通らないっす……(T_T)

>>944
それっきゃないっすか……(T_T) ちょっと条件の数が多い(100前後)なので、どうしようかなぁ……。
ちなみにPostgreSQLではOKなようです>INのサブクエリに複数列
946NAME IS NULL:2006/10/03(火) 11:50:43 ID:???
>>945
そっか。
>>943のはPostgreSQL8.1だと通るけどな。
947NAME IS NULL:2006/10/03(火) 11:51:12 ID:???
ってそう書いてあったか、スマン
948NAME IS NULL:2006/10/03(火) 16:50:38 ID:???
1から順に足す関数ってありますか。
5なら15、10なら55って求められるようなの。
949NAME IS NULL:2006/10/03(火) 18:02:27 ID:???
汎用的なのは無いんじゃないか。作るのは簡単
950NAME IS NULL:2006/10/04(水) 12:59:52 ID:???
select (n+1)*n/2 from dual;

こんなん?
951NAME IS NULL:2006/10/04(水) 17:18:06 ID:???
>>950

天才現る。
952950:2006/10/05(木) 00:55:24 ID:???
>>951
いあ、昔読んだ話でピタゴラスだか何だかが子供の頃に
思いついたアルゴリズムって事で覚えてただけなんよ…。
自分で思いついたんならえらいんだけどね('A`;)
953NAME IS NULL:2006/10/05(木) 01:15:01 ID:???
ガウスだろ
954950:2006/10/05(木) 02:02:58 ID:???
>>953
おおう。確かにwikipediaでガウス調べたら書いてたよー。
誰だったか思い出せなくて気持ちわるかってん。ありんこ('A`)ノ
955NAME IS NULL:2006/10/05(木) 09:24:18 ID:???
ちゅうか高校数学1じゃないのか?
956NAME IS NULL:2006/10/05(木) 11:35:43 ID:???
PostgreSQLなのですが、
・あるテーブルtable_aが存在していないとき、table_aの作成と初期データの
INSERTを行なう
・table_aがすでに存在するときは、table_aの作成と初期データのINSERTを
行なわない(初期データのINSERTをスキップする)
といったことを実現するにはどのように記述すればいいのでしょうか。
957NAME IS NULL:2006/10/05(木) 12:17:00 ID:???
>>956
なんでそんなことを、、、というのはともかく
PL/pgSQLを使えばできるかな?
SQLの範囲外なのでPosqgreSQLのスレで聞いてね
958NAME IS NULL:2006/10/05(木) 23:29:54 ID:???
>955
小学校のときの「たのしいさんすう」って算数のノートに載ってたよ。
959NAME IS NULL:2006/10/06(金) 10:06:47 ID:???
>>956
pg_tables だったか、そういう名前のシステムテーブルをselectしてtable_aの存在確認を行うといい。
960NAME IS NULL:2006/10/06(金) 21:13:06 ID:bDRzLVyV
すまんおしえてくれ。
テキストボックスが4つくらいあってその中に文字入れて
DBから抽出したいんだが。
WHERE〜ANDで結ぶとテキストボックスに全部入力値がないと
抽出できないじゃん。
空欄のテキストボックスはスルーして入力された単語のみで
抽出するにはどうすればいいの。。。
961NAME IS NULL:2006/10/06(金) 21:52:29 ID:???
世にある検索の複数指定の多くがラジオボタンとかプルダウンってところから
察しろって気がするが。
962674:2006/10/06(金) 21:55:20 ID:???
VBAでそういうの作ったけど、SQLと全然関係ないじゃん。
まぁSQLステートメントの部分がって無理やりなら言えなくも無いけど。
963NAME IS NULL:2006/10/06(金) 22:05:43 ID:bDRzLVyV
>>961
なるほど、自分で入力した文字列だと
確実じゃないしね。確かに言われてみるとプルダウンとかが多いですね。


いくら調べてもわからなくて。
やはりDBから、元から値を取得して選ばせたほうがいいのかな。

それでも複数テキストボックスから抽出ってできるんでしょうか?
964NAME IS NULL:2006/10/06(金) 22:10:02 ID:???
SQLにテキストボックスなんてないぞ
いったいなんの話をしておるのだ
965NAME IS NULL:2006/10/06(金) 22:11:12 ID:???
環境がわからんから答えにくいんだが、WEBアプリとかだと
テキストボックスに検索条件をユーザーに入力させるのは
セキュリティ上かなり、アレなんだが・・・。

出来る出来ないの話しなら、そりゃ動的にSQL生成するか、
非常に無駄っぽいサブクエリがテキストボックスの分だけ
走る様に組んどけば可能だろう。
966NAME IS NULL:2006/10/06(金) 23:34:14 ID:???
IF テキストボックス1.TEXT <> "" THEN
    SQL = SQL & " AND 項目1 = " & テキストボックス1.TEXT
ENDIF

IF テキストボックス2.TEXT <> "" THEN
    SQL = SQL & " AND 項目2 = " & テキストボックス2.TEXT
ENDIF

VBなんて10年ぶりだ。

967NAME IS NULL:2006/10/06(金) 23:48:00 ID:???
むかしこのスレで、似たような話題が出て
おもしろいSQL紹介している人がいたよ。
過去ログ調べたら出てきた。

↓の312あたりから。
http://2ch.dumper.jp/0005090373/

968NAME IS NULL:2006/10/07(土) 06:00:19 ID:???
>>967
参考になった
彼のスレの313がなんでまともに動くのかわからんけど
323ならなるほどって感じ
そういえば最近のCodezineに3値論理の記事が出てたね

ttp://codezine.jp/a/article/aid/532.aspx
969NAME IS NULL:2006/10/07(土) 06:21:58 ID:???
てかMySQLじゃ動かねえなこれ
理屈は(unknown AND age < 20) is not falseはたしかになるほど
970NAME IS NULL:2006/10/07(土) 08:56:51 ID:???
>>964
すみません、Webアプリかにあるテキストボックスです。

>>965
セキュリティー上では良くなのですか?
勉強になります。

>>966
それをクリックイベントのところに記述するんですね!
項目っていうのは列名ですよね。
やってみます。

>>967
それはわたくし当てですか?
見てみます。
971NAME IS NULL:2006/10/07(土) 19:18:08 ID:???
質問です。
状況によって特定のカラムだけ欲しい場合と、ほぼ全てのカラム(の情報)が欲しい
場合があると思います。このとき、selectに指定するカラムの数によって実行速度や
DB負荷などはどの程度違うものなのでしょうか?
1.) select foo from hoge;
2.) select foo, bar, baz, quux from hoge; (あるいは select * from hoge;)

もちろんテーブル構造やDB規模によって異なってくるとは思いますが、指定した
カラム数によってDBの動きがどうなるのかが知りたいのです。
数が少ないほどメモリの消費量が少ないとか、転送量が減るとか、あるいは
テーブルのデータはメモリ上に載るのでカラム数が増えてもあまり気にするほどの
差はでないとかそういう感じで。。。

972NAME IS NULL:2006/10/07(土) 19:34:21 ID:???
>>971
そんなことよりインデクスが効いてるかどうかの方が重要
200倍くらい速度が違う場合もある
973NAME IS NULL:2006/10/08(日) 02:21:01 ID:???
>>971
そりゃ 出たviewのトータルバイト数が少ない方が、
全てにおいてメリットばかりっすわ。
逆にデメリットはないんじゃないの。プログラマの手間増えるぐらいか。
974NAME IS NULL:2006/10/08(日) 06:59:08 ID:1t6iDKSI
ここで質問してる人は実は仕事で行き詰ってる人?
975NAME IS NULL:2006/10/08(日) 12:16:30 ID:???
そりゃそうだろう、他に何の用途がある
976NAME IS NULL:2006/10/08(日) 13:39:19 ID:???
>975
パズル好き
977NAME IS NULL:2006/10/08(日) 14:00:39 ID:???
答えてるのはほぼ間違いなく暇人だがな
978NAME IS NULL:2006/10/08(日) 16:03:44 ID:???
質問させてください。
Windows 2000 に SQL Server 2000 をインストールして使っていました。
OSのホスト名を変更したのですが、SQL Server に昔のホスト名が残ってしまいます。
(レジストリを検索しましたが、ヒットしませんでした。)

SQL Server は、ホスト名をどこで管理しているのでしょうか?
また、変更するにはどうすればよいのでしょうか?
979NAME IS NULL:2006/10/08(日) 17:09:15 ID:???
>>978
つ Microsoft SQL Server 総合スレ 4
980NAME IS NULL:2006/10/08(日) 18:07:57 ID:???
MySqlが多いみたいだが仕事で使うのか?暇人は同意。
981978:2006/10/08(日) 19:04:37 ID:???
>>979
そちらで質問させてもらいました。
誘導ありがとうございます。
982NAME IS NULL:2006/10/08(日) 19:53:17 ID:???
ウチのサーバはMySQL。でも何故か3.0
983NAME IS NULL:2006/10/08(日) 22:02:02 ID:???
素敵やん
984NAME IS NULL:2006/10/09(月) 02:07:53 ID:???
SQLとはちょっと違うのだが一つ質問。
プロセス間通信のかわりにデータベースをメッセージパッシングのためのキューとして使うのってなんか問題あるのかな?
アプリ同士のメッセージ交換にActiveMQとかCORBAを使わずに簡単にできる方法としていいのかなと思うのだが。
そもそもデータベースってシステム内のスケールがものすごく広いグローバル変数だよな?
985NAME IS NULL:2006/10/09(月) 06:33:31 ID:???
>>984
AS/400(今はiSeriesか)でも使っとけ。
システム(OS)がDB以外にもDTAQ,OUTQ,MSGQ,SYSLOG等の
数々のキューが用意されている。

DB使うのは悪くはないと思うけどプロセスの数が増えて
メッセージの応答やらセマフォとか考え出すと、
自前でDB部に対してコーティングするのが
ウザくなってくるので、メッセージキューなんかはOSまかせに
した方がプログラミングが楽だ罠。
986984:2006/10/09(月) 14:55:26 ID:???
>>984
×スケール
○スコープ
..................................org
987NAME IS NULL:2006/10/10(火) 02:50:06 ID:0dcODXjr
下記の条件で商品数を集計したいと考えています。

しかし、原価のフィールドがNULLの場合、3つ全ての条件にヒット
しないため集計対象となりません。

原価フィールドにNVL関数を使用すると集計できますが、
もっといい方法がないでしょうか?

「NOT」の使用方法に問題があるのでしょうか?

商品A.原価=100円
商品B.上記以外 かつ 原価=1円以上 かつ 売値=300円
商品C.上記以外

商品A>商品B>商品C(商品A、商品B以外の全て)


SELECT
SUM(CASE WHEN 原価 = 100 THEN 1 ELSE 0 END) AS 商品A,
SUM(CASE WHEN (原価 > 1 AND 売値 = 300) AND NOT 原価 = 100 THEN 1 ELSE 0 END) AS 商品_B,
SUM(CASE WHEN NOT (原価 > 1 AND 売値 = 300) AND NOT 原価 = 100 THEN 1 ELSE 0 END) AS 商品C
FROM
商品管理表


988987:2006/10/10(火) 03:09:06 ID:0dcODXjr
>>987の質問に関連して

下記条件では原価がNULLのレコードが
ヒットできませんでした。

WHERE NOT 原価 = 100


下記条件だとヒットします。
WHERE NOT NVL(原価,0) = 100

データがNULLの際には特別な扱いが必要なのでしょうか?
989NAME IS NULL:2006/10/10(火) 03:12:16 ID:wLuxOSg2
>>987
T−SQL、PL/SQLなら、
AND ISNULL(原価, 0) <> 100

DB2なら、
AND IFNULL(原価, 0) <> 100

考え方はいいね。こういう部下なら教えても意味がある。OTZ
990NAME IS NULL:2006/10/10(火) 03:14:58 ID:wLuxOSg2
>>988
あれ?分ってるじゃん。
NULLは何に対しても偽になるよ。
逆に言うと計算をキャンセルさせるロジックとしても利用できる。
991987:2006/10/10(火) 03:23:38 ID:0dcODXjr
>>989 >>990
回答ありがとうございました。
参考にさせていただきます。
992NAME IS NULL:2006/10/10(火) 03:32:55 ID:wLuxOSg2
>>991
どうしても0に変換したくないなら
AND (原価 <> 100 OR 原価 IS NULL)
って方法もあるけど、データ量が多い時にOR入れると遅くなるよ。
993NAME IS NULL:2006/10/10(火) 11:58:04 ID:???
TABLE A
+---------------------+----+--------+
| time | name |
+---------------------+----+--------+
| 2006-05-27 14:01:07 | apple
| 2006-05-27 14:01:07 | apple
| 2006-05-27 14:01:12 | banana
| 2006-05-27 14:01:00 | orange
+---------------------+----+--------+

TABLE B
+---------------------+----+--------+
| time | rw | name |
+---------------------+----+--------+
| 2006-05-27 14:01:05 | w | apple
| 2006-05-27 14:01:07 | r | apple
| 2006-05-27 14:01:09 | w | orange
+---------------------+----+--------+

というテーブルがあり、Bのrwをtimeの値が大きいものから抽出し、Aの同じnameのデータを持つ行に追加した結果を得たいのですが、どうすればよいでしょうか?
よろしくお願いします。
994NAME IS NULL:2006/10/10(火) 14:05:45 ID:???
次スレテンプレ

【帰ってきた】SQL質疑応答スレ 3問目

参考リンク
http://www.atmarkit.co.jp/fnetwork/rensai/sql01/sql1.html
http://oraclesqlpuzzle.hp.infoseek.co.jp/
http://www.techscore.com/tech/sql/

前スレ:【帰ってきた】SQL質疑応答スレ 2問目
http://pc8.2ch.net/test/read.cgi/db/1141622643/l100
995NAME IS NULL:2006/10/10(火) 14:31:03 ID:???
サンキュー、そのままたてた

【帰ってきた】SQL質疑応答スレ 3問目
http://pc8.2ch.net/test/read.cgi/db/1160458216/
996NAME IS NULL:2006/10/10(火) 14:33:19 ID:???
>>993
よくわからん、追加した結果がどうなるかも書いてみて
997小倉優子 ◆en0rG2J.f6 :2006/10/11(水) 06:07:26 ID:???
998小倉優子 ◆en0rG2J.f6 :2006/10/11(水) 06:08:27 ID:???
999小倉優子 ◆en0rG2J.f6 :2006/10/11(水) 06:08:57 ID:???
1000小倉優子 ◆en0rG2J.f6 :2006/10/11(水) 06:09:28 ID:???
1000ならジュースでも飲むか
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。