トップページ⇒db
1001コメント336KB

SQL質疑応答スレ

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。03/06/30 20:46ID:m1O8kdcm
です。
0153NAME IS NULL04/04/13 11:23ID:???
>>152
サブクエリを覚えて嬉しいんだYO
0154NAME IS NULL04/04/14 00:58ID:sNa3vHBT
tbl1
id INTEGER
keyword_id INTEGER
name VARCHAR(255)

tbl2
keyword_id INTEGER
keyword VARCHAR(255)

のようなテーブルがあるとします。
tbl1.keyword_idからtbl2.keywordを取得しtbl1.nameに入れて更新したいのですが、
プログラム側でループ回して1つづつSELECT,UPDATEする以外に、
何か良い方法はないでしょうか?
0155NAME IS NULL04/04/14 08:00ID:???
>>154
tbl1.name = tbl2.keyword ってことなら、
UPDATE tbl1 SET name=tbl2.keyword FROM tbl2 WHERE tbl1.keyword_id=tbl2.keyword_id;
で、できる。

しっかし、こういうメンテみたいな事を、日常的に発生するのか?
メンテとか仕様変更程度なら、プログラム側でループさせてもいいような気もする。
0156NAME IS NULL04/04/14 09:16ID:goCOTvMk
>「複合キー」というのは、1つの行において、
>複数のカラムを合わせたモノを1つのキーとして扱うという感じでしょうか?

これ以外の複合キーってあるんかな?
0157NAME IS NULL04/04/15 14:44ID:kKTGTXIq
MSAccessのSelect文で
1
2
3
:

と出力されるような関数または技はありますか?
0158NAME IS NULL04/04/15 17:01ID:jvLa74JA
項目A 項目B 項目C
20050  200  50
20000  100  50
30000  100  00

このような感じのテーブルから、項目Aが項目B+項目Cの形になっている物を
取得したいのですが。
それと、日付型との比較の仕方も教えてもらえないでしょうか。
0159NAME IS NULL04/04/15 17:30ID:???
>>158
SELECT * FROM t1 WHERE 項目A = 項目B||項目C;

日付型との比較って?
0160NAME IS NULL04/04/15 17:47ID:jvLa74JA
>>159
できました。ありがとうございます。
あと、二つ目の質問の方は

項目D(日付/時刻型)
2004/04/01 12:00:00
2004/05/01 12:00:00

2004/04/15 12:00:00

このようなテーブルから、今日の日付よりも大きい物を取得したいのですが。
0161NAME IS NULL04/04/15 18:33ID:???
>>160
WHERE CAST(項目D AS DATE) > CURRENT_DATE;
0162NAME IS NULL04/04/16 10:53ID:dIVUU8kI
>>161
ありがとうございます。
あと、項目Dが1月以上前の日付になっているデータを取り出すやり方も教えて貰えないでしょうか。
0163NAME IS NULL04/04/16 13:44ID:J3JWWPjP
まずは自分で調べてみたら?
「こういう方法でここまで調べて、こんな状況まではたどり着いたけど、
ここから先はどうすればいいのか」
みたいな感じでさ。
0164NAME IS NULL04/04/16 14:25ID:???
>>162
たぶん日本語の勉強も必要だな。ヒントだけ。
WHERE CAST(項目D AS DATE) < CURRENT_DATE - 一ヶ月 ;
0165NAME IS NULL04/04/18 04:34ID:???
オラクルで
ALL OUTER JOIN をやるにはどうしますか?
0166NAME IS NULL04/04/20 00:37ID:???
>>165
8i以前ってことか?

左外部結合するSQL
UNION
右外部結合するSQL
0167NAME IS NULL04/04/20 01:09ID:???
つーか、
FULL OUTER JOIN じゃないのか?
0168NAME IS NULL04/04/23 03:24ID:???
どれくらいのことができればSQL使えると人様に胸張って言えるかな?
0169NAME IS NULL04/04/23 11:12ID:BroRaDV4
select * from TABLE_NAME
0170NAME IS NULL04/04/23 12:11ID:???
DROP DATABASE
0171NAME IS NULL04/04/23 15:42ID:???
彼女にINSERTしてCOMMITできるようになってから。
0172NAME IS NULL04/04/23 16:55ID:???
>>171
INSERTしておいてROLLBACKする方がいいなw
0173NAME IS NULL04/04/23 17:24ID:???
漏れは、INSERTとROLLBACKを、DBがハングアップするまで
ループ処理したいなw
0174NAME IS NULL04/04/23 17:28ID:???
BIJIN TRANSACTION
0175NAME IS NULL04/04/25 02:15ID:OEZtU36x
TAB_A------TAB_B-------------------------
VALUE_A(PK)GROUP_ID(PK)VALUE_B(PK)
------------------------------------
111
212
314
21
22
23
24
25
31
32
41
42
43

このようなデータがあるときに、TAB_Aと同じ組み合わせを持つグループを
TAB_Bの中から探すにはどうすればいいでしょうか?この場合はGROUP_ID=4
が正解です。なお、TAB_Bの中でひとつのグループが持つレコード数はTAB_A
の行数と等しいとは限りません(見ればわかると思いますが)。

Oracle 8iですが、副問い合わせをいくつか使ってそれらしいSQL文はできたの
ですが、もっとスマートな方法はないもんかと思いまして。
0176NAME IS NULL04/04/25 02:16ID:OEZtU36x
ああ、ズレてる…
0177NAME IS NULL04/04/25 02:22ID:OEZtU36x
こんな感じです

TAB_A
VALUE_A(PK)
-----------
1
2
3

TAB_B
GROUP_ID(PK) VALUE_B(PK)
------------ -----------
1   1
1   2
1   4
2   1
2   2
2   3
2   4
2   5
3   1
3   2
4   1
4   2
4   3
0178NAME IS NULL04/04/25 16:07ID:???
>>175がどんなSQLを思いついたのか知らんが、こんなんでました。

SELECT * FROM (SELECT group_id FROM tab_b GROUP BY group_id HAVING COUNT(group_id)=(SELECT COUNT(*) FROM tab_a))AS bar
WHERE NOT EXISTS ( SELECT * FROM tab_b WHERE NOT EXISTS(SELECT * FROM tab_a WHERE value_a=tab_b.value_b) AND group_id=bar.groupid);

tab_aと同じ行数を持つtab_b.group_idを求めて、tab_a.value_aにないvalue_bを持つ行を弾いた感じです。
0179NAME IS NULL04/04/26 21:30ID:9BxX3SKm
table aが下のようになっていまして、
id|value1
--+------
1|aaaa
2|bbbb
3|cccc

table bが以下のようになっているとします。
id|value2
--+------
1|hhhh
1|iiii
2|jjjj
4|kkkk

これを、
id|value1|value3
--+------+---------
1|aaaa |hhhh iiii
2|bbbb |jjjj
3|cccc |

のような形でtable bのvalue2をスペース区切りで文字列連結してSQL一文でやりたいのですが、
どなたか教えていただけないでしょうか。
DBはpostgresqlです。
0180NAME IS NULL04/04/26 23:08ID:hVx47epU
SQLServer2000で「SELECT * FROM ユーザー名 .テーブル名」というように、
テーブル名の前にユーザー名をつけないとSELECTできません。
テーブル名だけでSELECTできるようにするには、どのように設定したらよいでしょうか?
Enterprise Managerとかで設定できそうな気がするのですが、わかりません。
どうぞよろしくお願いいたします
018118004/04/26 23:36ID:hVx47epU
自己解決しました
0182NAME IS NULL04/04/26 23:42ID:???
>>179
list()のような集約関数がないとむりぽ。
018317904/04/27 00:00ID:ZINPSHoZ
>>182
これ、むりぽなんですか?
よく使われそうな気がするんですけど。。
0184NAME IS NULL04/04/27 05:06ID:???
>>183
一般的にRDBでは動的にカラムを増やすようなことしない。
やるとすれば↓のような結果をもらってクライアント側で処理する

id|value1|value3
--+------+---------
1|aaaa |hhhh
1|aaaa |iiii
2|bbbb |jjjj
3|cccc |
0185NAME IS NULL04/04/27 20:21ID:???
>>184 名回答!
0186NAME IS NULL04/04/29 13:23ID:???
  バックアップしたデータを丸ごと、またDBのテーブルに毎日突っ込んでる俺はどうですか?
0187NAME IS NULL04/05/05 18:22ID:???
>>175
左右が逆かもしれないけど...
SELECT GROUP_ID
 FROM TAB_A LEFT JOIN TAB_B ON VALUE_A = VALUE_B
 GROUP BY GROUP_ID
 HAVING COUNT(*) = (SELECT COUNT(*) FROM TAB_A)
  AND COUNT(VALUE_A) = (SELECT COUNT(*) FROM TAB_A);
0188NAME IS NULL04/05/05 22:27ID:???
>>186
まぁ、趣味は人それぞれだからな・・・
0189NAME IS NULL04/05/05 23:55ID:???
>>186
で、バックアップしたデータを突っ込んでいるテーブルのバックアップはどうするんだ?
0190NAME IS NULL04/05/08 01:52ID:PG+kCctR
すいません、教えてください。

まず、次の二つのテーブルがあるとします。

・2chねらーテーブル
 ユーザID(PK)

・スレ立てテーブル
 ユーザID(PK)
 スレ立て日付
 クソスレフラグ(デフォルト = '0')

2chが会員制という前提ですが、2chねらーテーブルには2ch会員全ユーザが、
スレ立てテーブルには、スレを立てたユーザIDとスレ立て日付が。
また、立てたスレがクソスレと認定されれば、クソスレフラグに'1'が入るものとします。

この2テーブルから、 優良2chねらーを抽出したいのです。
優良の定義とは・・・

・クソスレを立てていない(クソスレフラグ = '0')
・そもそもスレを立てたことがない(スレ立てテーブルに該当IDなし)

というものです。
これを、一回のSQLで実現させる方法はないでしょうか?
よろしくお願いします。

0191NAME IS NULL04/05/08 03:11ID:???
一発では難しいなぁ。どうしても2つになってしまう。

update スレ立て set クソスレフラグ=0 where ユーザID='漏れ';
select ユーザID from 2chねら
where ユーザID not in (select ユーザID from スレ立て where クソスレフラグ=1);
0192NAME IS NULL04/05/08 07:32ID:???
>>191
update文は関係ないだろ。あと、INよりEXISTSの方が高速。
SELECT ユーザID FROM 2chねらー
WHERE NOT EXISTS (SELECT * FROM スレ立て WHERE スレ立て.ユーザID=2chねらー.ユーザID AND クソスレフラグ=1);
0193NAME IS NULL04/05/09 21:12ID:???
「クソスレを立てたことがない」人を検索すればいいんだから、

SELECT * FROM 2chねらーテーブル
WHERE ユーザID NOT IN
    (SELECT ユーザID FROM スレ立てテーブル WHERE クソスレフラグ<>'0')
0194NAME IS NULL04/05/10 11:34ID:???
>>191ワロタ
019519004/05/14 02:02ID:OjLux1Gu
どうもありがとう。
皆さんの回答を参考に、なんとか問題解決出来ました。
普段は select なんちゃら from なんちゃら where なんちゃら order by なんちゃら
この程度のSQLで実現できる、単純業務に従事する漏れ。
これじゃ、いつまでたってもスキルアップは望めませんな・・・
もっと勉強しないといかんなぁ。
0196NAME IS NULL04/05/14 11:52ID:S2RlCOwq
教えていただきたい事があります

テーブル1 フィールド(ID,ID_NAME)pkey ID
テーブル2 フィールド(ID,CD,CD_NAME)pkey CD
テーブル3 フィールド(CD,NO,NO_NAME)pkey NO

の3テーブルがあります。
テーブル1にIDが存在してテーブル2にID存在しないパターン
テーブル2にCDが存在してテーブル3にCD存在しないパターン
テーブル3にCDが存在してテーブル2にCD存在しないパターン
のデータを選択するにはどうしたらよいのでしょうか?
イメージとしては

テーブル1
-------------------
ID | ID_NAME |
-------------------
1 うに1
2 うに2

テーブル2
--------------------------
ID | CD | CD_NAME |
--------------------------
1 1 かに1
1 2 かに2
3 3 かに3


テーブル3
--------------------------
CD | NO | NO_NAME |
--------------------------
1 1 むに1
3 2 むに2
4 3 むに3

実行結果
---------------------------------------------------------
ID | CD | NO | ID_NAME | CD_NAME | NO_NAME |
---------------------------------------------------------
1 2 うに1 かに2
3 3 かに3 むに2
3 むに3
2 うに2
としたいのですがどうしたらよいのでしょうか?
お願いします、教えて下さい!
019719604/05/14 11:59ID:S2RlCOwq
済みません、イメージが変になってしまいました!
わかり難くて申し訳ないですが、以下のような感じです。

テーブル1
-------------------
ID | ID_NAME |
-------------------
1, うに1
2, うに2

テーブル2
--------------------------
ID | CD | CD_NAME |
--------------------------
1, 1, かに1
1, 2, かに2
3, 3, かに3


テーブル3
--------------------------
CD | NO | NO_NAME |
--------------------------
1, 1, むに1
3, 2, むに2
4, 3, むに3

実行結果
---------------------------------------------------------
ID | CD | NO | ID_NAME | CD_NAME | NO_NAME |
---------------------------------------------------------
1, 2, '', うに1, かに2, ''
'', 3, 3, '', かに3, むに2
'', '', 3, '', '', むに3
2, '', '', うに2 '', ''

AAの偉大さを思い知らされました・・・
0198NAME IS NULL04/05/14 12:57ID:nNcVZ+ed

テーブル名:デジコ
キャラ 萌え度 キタ回数
--------------------------
A    6    11
B    7    12


テーブル名:プチコ
キャラ  作画枚数
--------------------------
A    100    


キャラ 萌え度 キタ回数 作画枚数
A    6    11  100
B    7    12    0(NULLではない)
をだすようなSQL文おしえてください。
0199NAME IS NULL04/05/14 13:08ID:???
>>196
>テーブル1にIDが存在してテーブル2にID存在しないパターン

SELECT * FROM テーブル1 WHERE NOT EXISTS (SELECT * FROM テーブル2 WHERE テーブル2.ID=テーブル1.ID);

>テーブル2にCDが存在してテーブル3にCD存在しないパターン
>テーブル3にCDが存在してテーブル2にCD存在しないパターン

上のSQLを参考にして考えれ。要領は同じ。
0200NAME IS NULL04/05/14 13:17ID:???
>>198
SELECT キャラ,萌え度,キタ回数,coalesce(作画枚数,0) from デジコ LEFT OUTER JOIN プチコ Using(キャラ);
0201NAME IS NULL04/05/16 18:29ID:e1RqkHtX
すいません。JOIN後のテーブルに任意の名前を付けたいときはどうしたら
良いですか?
select a,b
from (a left join b) as table3
↑省略しすぎ(汗
としてもエラーになってしまうし困っています。
ちなみに.MDBです。
よろしくお願いします。

0202NAME IS NULL04/05/17 02:08ID:???
MySQLで特定の月情報を取得する場合、month(DATETIMEカラム) = 1等といったように記述出来ますが、Oralceの場合、特定月の条件はどのようにして記述すればいいのでしょうか?
0203NAME IS NULL04/05/17 09:19ID:???
>>202
Oracleにはdate_partって関数はないのか?
0204NAME IS NULL04/05/17 11:42ID:???
>>201
( )必要だっけ?
0205NAME IS NULL04/05/17 19:20ID:n2kYxM4x
>>204
いや全く必要ない。
で回答はどこ?
0206NAME IS NULL04/05/17 19:33ID:???
JOIN後のテーブル名? に何か意味あるの?
0207NAME IS NULL04/05/17 21:26ID:n2kYxM4x
>>206
DB板はスレ違いかも知れないと今気づきましたが、
気づかないフリで説明します。
VB.netでは複数のテーブルをJOINするとtableという自動で仮名がつきます。
全く同じデータセットに同じテーブル名(table)をいれると
???としたエラーが炸裂するのでどうしてもJOIN後にテーブル名を
付けたいんです。こんなケースはDB単独では珍しいらしく手持ちの
SQL本には記載がなかったりする。
レスサンスコ。まだ会社(泣
0208NAME IS NULL04/05/17 23:00ID:???
>>202
TO_CHAR(DATEカラム, 'mm') = '1'みたいに文字列に変換すればいいのでは?
020920804/05/17 23:01ID:???
>>208
ごめん、
TO_CHAR(DATEカラム, 'mm') = '01'だね・・・。
0210NAME IS NULL04/05/18 10:24ID:???
select a, b
from (SELECT a,b FROM a left join b) table3
0211NAME IS NULL04/05/18 10:42ID:FLZcxqMK
>>208
どうもありがとうございます。これで何とかなりそうです。
0212NAME IS NULL04/05/18 11:48ID:+5UV1MyO
>>210
神さまありがとうございます。
0213NAME IS NULL04/05/18 17:28ID:???
うほっ
0214NAME IS NULL04/05/18 22:33ID:???
すいません、oracle9iで1つのカラムに入っているレコードを全て1行で取得したいのですが。
例えば、

id
----
1
2
3

を
1,2,3
の様にSQLのみで1行で取得するにはどうすればいいでしょうか?
よろしくお願いします。
0215NAME IS NULL04/05/19 02:23ID:???
>>214
マルチ
0216NAME IS NULL04/05/19 19:23ID:???
>>214
マルチだが答えてやるこんちくしょう

ピボットテーブル

でぐぐれうんこ

あとSQL入門書(定番のSQLポケットリファレンスでいいぞ)買って来いヘタレ野郎
0217NAME IS NULL04/05/20 14:00ID:+X5a+mzG
テーブル名:アニオタ
視聴者  萌え1 萌え2 
----------------------------------
A    ミドリ ヒナタ
B    アヤセ テマリ


を↓の表にするビュー作成を教えてください・・。

視聴者 萌え 
A    ミドリ
A    ヒナタ
B    アヤセ
B    テマリ
0218NAME IS NULL04/05/20 14:45ID:???
union
0219NAME IS NULL04/05/20 20:52ID:+w96lQEk
SQLServer2000でSPを作ってるのだが、Executeの中で文字列とINT型の変数
を繋げて新しい文字列を作るのってどうやるのですか?

Execute('
DECLARE @i INT,
@moji VARCHAR(20)
SET @i = 0
WHILE @i < 10
BEGIN
SET @moji = ''AAAA'' + @i + ''BBBB''
      〜
      〜
SET @i = @i + 1
END

SET @moji = ''AAAA'' + @i + ''BBBB''の部分で行き詰ってまつ。
誰かおせーて。
0220NAME IS NULL04/05/21 01:25ID:???
SELECT 視聴者, 萌え
FROM (
SELECT 視聴者, 萌え1 萌え
FROM アニオタ
) UNION (
SELECT 視聴者, 萌え2 萌え
FROM アニオタ
)
ORDER BY 視聴者;
0221NAME IS NULL04/05/21 12:26ID:???
>>219
convert とか cast とか
0222NAME IS NULL04/05/22 03:00ID:3pK+cfvK
MS SQL 2000にて、レコードがインサートされたら、とか
あるフィールドの値がhogeだったら、とかの条件で
外部exeを起動する方法ってあるのでしょうか?
よろしくお願いします。
0223NAME IS NULL04/05/22 03:38ID:3pK+cfvK
sp_start_jobストアドを利用できるようです。
0224NAME IS NULL04/05/23 18:32ID:3VGGJqhw
すみませんが教えてください。
select文でfromとwhereはどちらが先に解釈され、
条件が絞り込まれるのでしょうか?
またsql命令の優先順位や処理速度を調べる良い文献などはないでしょうか?
おねがいします。
0225NAME IS NULL04/05/23 19:26ID:???
>>224
各句の意味を考えればだいたい判ると思うぞ。
つか、FROMとWHEREの優先順位すら判らないというのは、
重症だぞ。
0226NAME IS NULL04/05/23 20:11ID:???
実行プラン見るってのじゃダメなのかい?
022722404/05/23 21:24ID:MO/uZXID
>>225
重症ですか(鬱)

select*from
(a join (select*from b where b.b is null) on a.id = b.id) join
(select*from c where c.c is null) on a.No = c.No)
where (c.order = ?)

と実験したところfromよりwhereの方が、優先だったのですが納得いかずなのです。

また表b および表cが、
なぜ副問い合わせで違った表名を自動的に割り当てられるのか?
といったことが、初めて副問い合わせを理解(ちょぴと)したことで浮き上がった
次第です。

プログラム言語を高速化するよりsqlの最適化の方がよりよいと思われたので、
できれば良い文献をキボン
今もってる本は答えしか載ってないので物足りないのです。
よろしくお願いします。
0228NAME IS NULL04/05/23 21:36ID:???
あ、馬鹿の方ですか
0229NAME IS NULL04/05/23 21:38ID:???
>>227
どのWHEREがFROMより上だってか?

で、文献だけど、漏れは「プログラマのためのSQL」
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894714809/250-9004556-6950643
を読んでいる。
023022404/05/23 21:56ID:MO/uZXID
>>229
実践だけだと馬鹿にされるよー
特定できなくってすまんね。で優先となってるポイwhereは
where (c.order = ?) の部分

from句部分よりwhere句部分が優先になることが、納得いかなかったのですが
やはりfrom句部分が優先のはずなのですね?(テーブルの条件を記述する以上
当然かもしれませんが)
文献は明日でも本屋に行って確認してみます。
ありがとう
0231NAME IS NULL04/05/23 22:34ID:???
>>230
(a join (select*from b where b.b is null) on a.id = b.id) join
(select*from c where c.c is null) on a.No = c.No)
の仮想テーブルを作ったうえでc.order =? の抽出をしているはずだが違うのか?
023222404/05/23 22:48ID:MO/uZXID
.>>231
その解釈で正解だとわたしも思います。
テスト用の環境(Rowが2・3行)で無知な人間がたまたまテーブル設計をしたので
fromよりwhereが優先のように見えたのでしょうねきっと。
でも>>229さまのおかげでもっと深くまで理解できそうです。
レスさんくす
0233NAME IS NULL04/05/24 11:25ID:+HRlZqXP
すみません、教えてください。

以下の3テーブルがあります。
その3テーブルより実行結果にあるような形でデータの取得
をするには、どのようなSQL文を書けばよいのでしょうか?

ちなみに3テーブル全てに関連付けられたデータが存在する
もののみを取得します。


TB1
| ID | NAME1 |
------------------
   1   NM1-1
   2   NM1-2

TB2
| ID | CD | NAME2 |
-------------------------
   1   1   NM2-1
   2   2   NM2-2

TB3
| CD | NO | NAME3 |
-------------------------
   1   1   NM3-1
   2   2   NM3-2


実行結果
| ID | NAME1 | CD | NAME2 | NO | NAME3 |
----------------------------------------------------
   1   NM1-1   1  NM2-1   1   NM3-1
   2   NM1-2   2  NM2-2   2   NM3-2

色々頑張ってみたんですけど、どうしてもできません。
初歩的なSQLだと思うのですが、どうしても解りませんでした。
よろしくお願いします!
0234NAME IS NULL04/05/24 11:39ID:???
>>233
SELECT tb1.id,tb1.name1,tb2,cd,tb2.name2,tb3.no,tb3.name3
 FROM tb1,tb2,tb3 WHERE tb1.id=tb2.id AND tb2.cd=tb3.cd;
023523304/05/24 11:49ID:+HRlZqXP
>>234
ありがとうございます。データ取得できました!

心苦しくももう一つお聞きしたいのですが、IDの値を指定して
データを取得したい場合は、副問合せというものを使用すれば
よいのでしょうか?
0236NAME IS NULL04/05/24 12:00ID:???
>>235
SELECT tb1.id,tb1.name1,tb2,cd,tb2.name2,tb3.no,tb3.name3
 FROM tb1,tb2,tb3 WHERE tb1.id=1 AND tb1.id=tb2.id AND tb2.cd=tb3.cd;
023723304/05/24 14:35ID:+HRlZqXP
>>236
ありがとうございます。
データは取得できたのですが、先生から
「副問合せ使え!ゴルァ!」と言われてしまいました。

副問合せ全くわからないです。
ネットで調べても2テーブル使用例しか発見できず・・・。
色々試行錯誤してみましたが、変な風にデータが取れてきてしまいます。

本当に申し訳ないのですが、教えていただけないでしょうか?
いや、ほんと厚かましいと思っているんですが。
0238無駄じゃ04/05/24 14:53ID:???
SELECT * FROM (SELECT tb1.id,tb1.name1,tb2,cd,tb2.name2,tb3.no,tb3.name3
 FROM tb1,tb2,tb3 WHERE tb1.id=tb2.id AND tb2.cd=tb3.cd) tbl4
WHERE tbl4.id=1
0239NAME IS NULL04/05/24 15:02ID:???
>>237
副問い合わせ? ひょっとしたらSQL92のJOINを言いたいのかも。
SELECT * FROM (tb1 JOIN tb2 USING(id)) JOIN tb3 USING(cd) WHERE id=1;
ついでに、わざとサブクエリを使ってやるとか?
SELECT * FROM (SELECT * FROM tb1 JOIN tb2 USING(id))AS tb4 JOIN tb3 USING(cd) WHERE id=1;
024023304/05/24 15:04ID:+HRlZqXP
>>238
2chで初めて神に遭遇しました。
ありがとうございます!
このSQLを元に副問合せを勉強します。
SQL自体に挫折しかかっていたので、
色々な意味で本当に助かりました!
024123304/05/24 15:08ID:+HRlZqXP
>>239
なんでもデータ件数が多くなった場合に、効率よく
処理するために副問合せを使うとの事だったんです。

そういうやり方もあるんですか。
試してみます。
ありがとうございます!
0242NAME IS NULL04/05/24 15:16ID:???
>>241
ああ、効率を考えるなら、
SELECT * FROM (SELECT * FROM tb1 JOIN tb2 USING(id) WHERE id=1)AS tb4 JOIN tb3 USING(cd);
だな。
しかし効率は、 WHERE id=1 を最初に持ってきた>>236 と同じ。
0243NAME IS NULL04/05/26 14:36ID:???
SQL*Loaderのことについて質問させてください。
固定長のデータを取り込む際に、文字列の後ろについた空白を削除して
データをINSERTしたい場合は、
FIELD3 POSITION(16:23) CHAR "to_date(:FIELD3,'YYYYMMDD')"(これは日付ですが・・・)
のようにTrimか何かをつかえばよろしいのでしょうか?
0244NAME IS NULL04/05/26 16:08ID:fy6id3aK
ちょっとスレタイからはズレますが、

ttp://www.spice-of-life.net/tapkit/ja/images/many_to_many.png

こういうテーブル構造だった場合、
Employeeテーブルと、ProjectテーブルにデータをINSERTした後、
両者を関連づけするためのEmployeeProjectテーブルにも、
明示的に関連づけをINSERTせんといかんですよね?

・・・救いようがないくらいにウンコな質問してスマソ
0245NAME IS NULL04/05/26 17:49ID:???
>>244
この図はLEFT(RIGHT) JOIN を使うって意味じゃないのか?
0246NAME IS NULL04/05/26 18:16ID:???
>>244
EmployeeProjectはプロジェクトに参加している社員名簿ってことだろ。

社員が増えた -> Employeeに追加
新規プロジェクト発足 -> Projectに追加
そのプロジェクトの人員決定 -> EmployeeProjectに追加

ただこれだけだが。プロジェクトだけ決まってもそれに参加する人員が決まってなければ
EmployeeProjectにデータはいれない(入れられない)だけ。

あとは、外部キーとか参照整合性制約で調べるよろし。
0247NAME IS NULL04/05/26 19:13ID:fy6id3aK
>>245>>246
ハゲシククスコ。
調べてきます。
0248NAME IS NULL04/05/28 22:08ID:???
SQLの書き方の質問です。

日付 金額
----------------------
2004/01/01   10000
2004/01/03 8000
2004/01/05 7000

の様に日付が一部飛んでるテーブルを

日付 金額
----------------------
2004/01/01   10000
2004/01/02 0 ←空白でもよい
2004/01/03 8000
2004/01/04 0 ←空白でもよい
2004/01/05 7000


と日付を埋める形で抽出したいです。
何か良い方法はありませんか?
完全な日付だけが並んだ一時テーブルを作って
外部結合で何とかなるのかな?と考えているのですが
一向に進みません・・・

Excel VBAでADOを使って
TXTファイルを読み込んでます。
0249NAME IS NULL04/05/28 22:35ID:???
SQLの書き方についての質問です。

日付 金額
-----------------------
2004/01/01 10000
2004/01/03 5000
2004/01/05 8000


という、一部日付が抜けているテーブルが
あります。

日付 金額
-----------------------
2004/01/01 10000
2004/01/02 0 ←空白でも良い
2004/01/03 5000
2004/01/04 0 ←空白でも良い
2004/01/05 8000

という日付を埋める形で抽出したいのです
なにか良い方法はありませんか?

日付のみ並んだ一時的なテーブルを作って
外部結合すればよいのかな?と思うのですが・・・

Excel VBAでADOを使ってTxtファイルを読み込んでいます。
0250NAME IS NULL04/05/28 22:37ID:???
>>249
二重書き込みすいません・・・
0251NAME IS NULL04/05/28 22:38ID:???
日付と言ってもなぁ…
0252NAME IS NULL04/05/31 09:54ID:???
>>250
外部処理

vbとか。
■ このスレッドは過去ログ倉庫に格納されています