あなたの心のスキーマ お埋めします
テーブルの削除と作成(というか一時的に作ってたテーブルのリネーム)を アトミックに行えなくて困ってます. perl-5.8.5 + mysql-3.23 で, $dbh->{AutoCommit} = 0; $dbh->do("DROP TABLE hoge"); $dbh->do("ALTER TABLE hoge_tmp RENAME TO hoge"); $dbh->commit; ってやってるのですが,この作業の最中に,他のスレッドが hoge を使おうとすると, 「テーブルがないよ」と言われる場合があります. 何か根本的に間違ってるのでしょうか?
>>956 テーブルをリネームする必要があるという設計が間違ってる予感。
何でリネームするのさ?
普通なら select * into hoge from hoge_tmp とかでデータを写すものだと思う。
データを写した後のhoge_tmpはtrancateするなりdropするなりすればいい。
少なくとも、リネームするときは他のスレッドがhogeを使おうとしない設計にするべきだろ。 ロックとかデータの整合性とかの点で、RDB使う意味無くなる。
959 :
956 :04/12/08 01:49:46 ID:???
>>957 ,958
ありがとうございます.
以下のように改めました.
$dbh->{AutoCommit}=0;
$dbh->do("DROP TABLE hoge_tmp");
$dbh->do("CREATE TABLE hoge_tmp ... SELECT ...");
$dbh->do("TRUNCATE TABLE hoge");
$dbh->do("INSERT INTO hoge SELECT * FROM hoge_tmp");
$dbh->commit;
>955 恋人スキーマが空っぽなので埋めてください
961 :
SQL初心者 :04/12/11 17:14:31 ID:bTxzaHjt
SQL文で少数点第三位を切り上げる方法を教えて下さい 例 5000 ÷ 6 = 833.333333 → 833.34にする方法 お願いします
>>961 round((5000/6)+0.009,2) とかじゃだめなの?
963 :
NAME IS NULL :04/12/13 10:07:31 ID:iwUEodU9
SQL言語ってどの会社が作っているんですか?
>>959 truncateしたときって、暗黙にcommitされちゃうから
table hogeがからっぽな瞬間があるよ。
967 :
NAME IS NULL :04/12/14 01:24:49 ID:4jo5gRvJ
table 1 table 2 |国語成績 | 数学成績| |国語成績 | 数学成績| |80 | 70 | |60 | 55 | 結果としてこの表を出したいんです さらに名前という列を追加して名前を入れたいんです。 |名前 | 国語成績|数学成績| |山下 | 80 | 70 | |井上 | 60 | 55 |
968 :
NAME IS NULL :04/12/14 01:25:53 ID:4jo5gRvJ
table 1 table 2 |国語成績 | 数学成績| |国語成績 | 数学成績| |80 | 70 | |60 | 55 | 結果としてこの表を出したいんです さらに名前という列を追加して名前を入れたいんです。 |名前 | 国語成績|数学成績| |山下 | 80 | 70 | |井上 | 60 | 55 |
969 :
NAME IS NULL :04/12/14 01:36:31 ID:4jo5gRvJ
しまった 二重カキコしてしまいました。すいません。 お願いします
union
971 :
968 :04/12/14 02:04:53 ID:4jo5gRvJ
select 国語成績,数学成績 from (select table 1.国語成績 from table 1 union select table 2.国語成績 from table 2) , (select table 1.数学成績 from table 1 union select table 2.数学成績 from table 2 これをためしてもエラーが出ました。 unionの使い方まちがってますか? 誰かおねがいします。
意味が良くわからんが、 SELECT [名前], [国語成績], [数学成績] FROM ( SELECT '山下' AS [名前], [table 1].[国語成績], [table 1].[数学成績] FROM [table 1] UNION SELECT '井上' AS [名前], [table 2].[国語成績], [table 2].[数学成績] FROM [table 2] ) こんな感じか? ちなみに眠いからテストはしてないYO。
973 :
968 :04/12/14 04:16:16 ID:8peVtg2k
>972 サンクス できました
974 :
NAME IS NULL :04/12/14 15:09:46 ID:gYkAsbc2
Prologプログラマです。一応その視点からの皆さんへの質問です。 皆さんは、SQLの仕様に不満はありませんか。
Prologなんて知らねーから、その視点とか言われても知らん。
SQLはいわゆる第三世代言語ともオブジェクト指向言語とも相性が 悪いのが難点なのだが。Prologとは仲良しなのかね?
978 :
NAME IS NULL :04/12/14 15:45:16 ID:4jkkJIXP
【序 論】
オウム事件とは、「オウム、創価、統一が共同でやっていた覚醒剤密造などの不法行為がばれそうになり、全ての罪をオウムに押付けた。」事件であると理解しています。
統一教会は、その起源から考えて、KCIA及びCIAの影響下にあると考えるべきです。
日本側のCIA専属のお爺さんたち、つまり、笹川さん、児玉さん、中曽根さんたちが、統一とつるんでいたのも、CIAの犬同士という絆があったわけです。
一方で、創価は創価で、笹川一派を通じて、統一と繋がりがありますし、それ以前に創価内部に深く入り込んでいる暴力団、
後藤組のもつ北朝鮮コネクションから、オウムの麻薬ビジネスに関わっていたわけです。
もちろん、日本社会に創価マフィアのネットワークをはりめぐらした学会を、CIAが放っておくわけがなく、マネーロンダリングなどに、しっかり利用されています。
宗教法人の財務の閉鎖性をCIAが利用しないと考える方が異常です。
そして、CIAお得意の麻薬ビジネスの日本支部が、オウムだったわけで、その収益が北朝鮮に還元されていたのも当然のことであり、
北の現体制を維持するための、CIAの有難い配慮だったわけです。
なにしろ北の体制が崩壊すると、一番困るのは、CIAのスポンサーである軍産複合体と国際金融資本であり、極東の緊張は、彼らの飯の種なわけですから。
麻薬王にして、CIAの帝王である大ブッシュさんが、統一の文と仲良しなのも、アッタリマエなわけですね。
今度の米大統領選でも、随分と統一のカネが小ブッシュ陣営に流れたようですね。
尚、本件の主たる議論は、2チャンネル、警察板の「告発します 第3部」スレッドにて、進めています。
http://mentai.2ch.net/test/read.cgi?bbs=police&key=985780338&ls=100
979 :
NAME IS NULL :04/12/14 16:23:58 ID:gYkAsbc2
>977 私も含めて、オンメモリーのリレーショナルデータベースとして Prolog、バックエンドにRDBMSを配置しC言語インターフェイスで繋ぐ というのが一般的なようです。Prologのデータベースに見つからない時 ORACLEから探すというような使い方をすることもあります。 ただ、私はProlog以前はSQLが専門だったので平気なのですが、 一般にPrologプログラマからはSQLの仕様は評判が悪い。副照会の 辺りに批判が集中するようです。一方、Prologは集約に弱い。 それから、全解探索機構がかえって仇となって、すべてシーケンシャル サーチになってしまう。いくらオンメモリーでも100万件を超えると やはり大変です。そんなことでSQLをPrologに変換するのは簡単ですが、 Prologコードを解析して最適なSQL文を生成するのは案外むずかしい。 それで、Prologを書けば、勝手にそれに対応するSQLが生成されて、 自由自在に行き来すると云うわけにはなかなかいきません。
980 :
NAME IS NULL :04/12/14 19:33:16 ID:qbSzLZbl
質問なのですが カラムのUNIQUE指定を外す構文を教えてください。
知りません。
∧ ∧ ┌───────── ( ´ー`) < シラネーヨ \ < └───/|──── \.\______// \ / ∪∪ ̄∪∪
>>982 こいつ最近見ないと思ったら、久々の登場だな。
SQLの勉強始めようと思っています 本当に初歩的な質問&多少すれ違いで申し訳ないんですが・・・ データベースを管理するためのシステム(ソフトウェア)がDBMSで DBMSを定義、操作する言語がSQLですよね? で、DBMSにはOracle、フリーのFirebirdなどがあり SQL言語にはPostgreQL、MySQLがあるって考えで合ってますか? また、現在は只のSQLって言語は使用されてるんですか?
>>985 >データベースを管理するためのシステム(ソフトウェア)がDBMSで
>DBMSを定義、操作する言語がSQLですよね?
は、まぁそれでいいとして、
>で、DBMSにはOracle、フリーのFirebirdなどがあり
>SQL言語にはPostgreQL、MySQLがあるって考えで合ってますか?
は、禿しく勘違い。そこに上げたのは全てDBMSの製品名で、
それぞれに国際標準規格(ISO-SQL)±αのSQLが載っている。
釣りだといいな…
988 :
NAME IS NULL :04/12/15 16:59:46 ID:MM590eEu
PostgreSQL を使用しています。 SELECT (SELECT B.keyword FROM B WHERE A.id=B.id LIMIT 1) FROM A; として、Aの表のidをBの表で合致するkeywordで置き換えたい時、 激しく時間がかかるので、A と B を JOIN させましたが、 SELECT A.name, B.keyword FROM A CROSS JOIN B WHERE A.id=B.id; Bの表に合致するレコードが複数あった場合は、レコード数が増えて、 正しく表示されません。外部結合や内部結合に単に変えても、 Bに対して LIMIT の指定が出来ないので、うまくいきません。 何か良い方法はないでしょうか?
>>988 SELECT DISTINCT A.name,B.keyword FROM A JOIN B USING(id);
でいいのか? なんか、それ以前に(ry
990 :
NAME IS NULL :04/12/15 19:51:58 ID:wKX08Pae
Firebird1.03を利用しています。 部署毎の売上合計金額を、降順に表示したく SELECT ORDER.SECTION, Sum(MAINORDER.ACCOUNT) FROM ORDER GROUP BY MAINORDER2.SECTION ORDER BY Sum(ORDER.ACCOUNT) DESC; としました。MS Accessではこれでできるのですが Firebirdでは「(ORDER BYにある)Sumなんて知らない。」 とエラーになります。 どなたか 1.他に合計金額でソートするSQL句 2.他の方法で実現する方法 を教えていただけないでしょうか。 よろしくお願いします。
991 :
990 :04/12/15 19:53:52 ID:wKX08Pae
すみません。SQLを切り貼りして中途半端に修正してました。 正しくは SELECT ORDER.SECTION, Sum(ORDER.ACCOUNT) FROM ORDER GROUP BY ORDER.SECTION ORDER BY Sum(ORDER.ACCOUNT) DESC; です。 どなたかよろしくお願いします。
>>991 SELECT ORDER.SECTION, Sum(ORDER.ACCOUNT) AS Total
FROM ORDER
GROUP BY ORDER.SECTION
ORDER BY Total DESC;
で、どぉ。
>>991 CREATE VIEW test AS
SELECT ORDER.SECTION, Sum(ORDER.ACCOUNT) AS TotalAccount
FROM ORDER
GROUP BY ORDER.SECTION;
でビューを作成して
SELECT t.ORDERSECTION, t.TotalAccount
FROM test t
ORDER BY t.TotalAccount DESC;
にしる。
FB1.03使っているけど、
>>992 の方式はうまくいかなかった(工夫すればできるかもしれないけど)。
FB1.5でできるかもしれないけど、持ってないからわからん。
って、よく見たらもうすぐ1000じゃねえかよ。
994 :
NAME IS NULL :04/12/15 21:20:04 ID:PR2HhgMt
まだ他に質問スレが残ってるからそこに移動してもよかったろうに。 まあいいけどさ。
>>996 次スレでいきなりレプリケーションみたいなネタが着てるけど、
このスレは、ストアド類もなしに出来ればベンダーに依存しない
純粋なSQLネタがいいな。
質問者が元のテーブル等と、期待する結果のサンプルを出して、
答える人がSQLだけを考えるみたいな。
998 :
991 :04/12/16 09:54:11 ID:OCa5514Y
スレが残り少ないのでまとめレスで失礼します。
>>992 試した結果、「(ORDER BYにある)○○(列名)なんて知らない。」
と言われてしまいました。
>>993 アドバイスの通り、ビューで対応したく思います。
お二方、みなさん、アドバイスありがとうございました。
1000ならE.F.コッド復活
1000ならE.F.コッド復活しない
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。