SQL質疑応答スレ

このエントリーをはてなブックマークに追加
952NAME IS NULL:04/12/06 21:09:29 ID:???
>>951
上は間違えです、すいません。
953NAME IS NULL:04/12/06 21:10:49 ID:???
>>951
上は間違えです、すいません。
954NAME IS NULL:04/12/06 21:10:16 ID:???
>>951
上は間違えです、すいません。
955NAME IS NULL:04/12/07 20:32:59 ID:???
あなたの心のスキーマ
お埋めします
956NAME IS NULL:04/12/08 00:42:42 ID:???
テーブルの削除と作成(というか一時的に作ってたテーブルのリネーム)を
アトミックに行えなくて困ってます.
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 を使おうとすると,
「テーブルがないよ」と言われる場合があります.
何か根本的に間違ってるのでしょうか?
957NAME IS NULL:04/12/08 01:06:25 ID:???
>>956
テーブルをリネームする必要があるという設計が間違ってる予感。
何でリネームするのさ?

普通なら select * into hoge from hoge_tmp とかでデータを写すものだと思う。
データを写した後のhoge_tmpはtrancateするなりdropするなりすればいい。
958NAME IS NULL:04/12/08 01:20:22 ID:???
少なくとも、リネームするときは他のスレッドがhogeを使おうとしない設計にするべきだろ。
ロックとかデータの整合性とかの点で、RDB使う意味無くなる。
959956: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;
960NAME IS NULL:04/12/11 16:18:37 ID:???
>955
恋人スキーマが空っぽなので埋めてください
961SQL初心者:04/12/11 17:14:31 ID:bTxzaHjt
SQL文で少数点第三位を切り上げる方法を教えて下さい

 5000 ÷ 6 = 833.333333 → 833.34にする方法

お願いします                 
962NAME IS NULL:04/12/12 03:07:34 ID:???
>>961

round((5000/6)+0.009,2) とかじゃだめなの?
963NAME IS NULL:04/12/13 10:07:31 ID:iwUEodU9
SQL言語ってどの会社が作っているんですか?
964NAME IS NULL:04/12/13 11:54:28 ID:???
965NAME IS NULL:04/12/13 19:05:09 ID:???
ttp://www.sql.com/
じゃない。
966NAME IS NULL:04/12/13 22:14:37 ID:???
>>959 truncateしたときって、暗黙にcommitされちゃうから
table hogeがからっぽな瞬間があるよ。
967NAME IS NULL:04/12/14 01:24:49 ID:4jo5gRvJ
table 1          table 2
|国語成績 | 数学成績|       |国語成績  |  数学成績|
|80   | 70 | |60   | 55   |



結果としてこの表を出したいんです
さらに名前という列を追加して名前を入れたいんです。


|名前  | 国語成績|数学成績|
|山下  | 80 | 70 |
|井上  | 60 | 55 |
968NAME IS NULL:04/12/14 01:25:53 ID:4jo5gRvJ
table 1          table 2
|国語成績 | 数学成績|       |国語成績  |  数学成績|
|80   | 70 | |60   | 55   |



結果としてこの表を出したいんです
さらに名前という列を追加して名前を入れたいんです。


|名前  | 国語成績|数学成績|
|山下  | 80 | 70 |
|井上  | 60 | 55 |
969NAME IS NULL:04/12/14 01:36:31 ID:4jo5gRvJ
しまった 二重カキコしてしまいました。すいません。
お願いします
970NAME IS NULL:04/12/14 01:48:20 ID:???
union
971968: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の使い方まちがってますか?
誰かおねがいします。
972NAME IS NULL:04/12/14 03:06:58 ID:???
意味が良くわからんが、

SELECT [名前], [国語成績], [数学成績] FROM (
SELECT '山下' AS [名前],  [table 1].[国語成績], [table 1].[数学成績] FROM [table 1]
UNION
SELECT '井上' AS [名前],  [table 2].[国語成績], [table 2].[数学成績] FROM [table 2] )

こんな感じか?
ちなみに眠いからテストはしてないYO。
973968:04/12/14 04:16:16 ID:8peVtg2k
>972
サンクス
できました
974NAME IS NULL:04/12/14 15:09:46 ID:gYkAsbc2
Prologプログラマです。一応その視点からの皆さんへの質問です。
皆さんは、SQLの仕様に不満はありませんか。
975NAME IS NULL:04/12/14 15:18:36 ID:???
Prologなんて知らねーから、その視点とか言われても知らん。
976NAME IS NULL:04/12/14 15:24:49 ID:???
>>974
:-)
977NAME IS NULL:04/12/14 15:42:57 ID:???
SQLはいわゆる第三世代言語ともオブジェクト指向言語とも相性が
悪いのが難点なのだが。Prologとは仲良しなのかね?
978NAME 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
979NAME 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が生成されて、
自由自在に行き来すると云うわけにはなかなかいきません。
980NAME IS NULL:04/12/14 19:33:16 ID:qbSzLZbl
質問なのですが
カラムのUNIQUE指定を外す構文を教えてください。
981NAME IS NULL:04/12/14 19:56:47 ID:???
知りません。
982NAME IS NULL:04/12/14 20:53:06 ID:???
  ∧ ∧     ┌───────── 
  ( ´ー`)   < シラネーヨ 
   \ <     └───/|──── 
    \.\______// 
      \       / 
       ∪∪ ̄∪∪ 
983NAME IS NULL:04/12/14 22:59:30 ID:???
>>982
なつかしー
984NAME IS NULL:04/12/15 00:37:20 ID:???
>>982
こいつ最近見ないと思ったら、久々の登場だな。
985NAME IS NULL:04/12/15 10:09:25 ID:???
SQLの勉強始めようと思っています
本当に初歩的な質問&多少すれ違いで申し訳ないんですが・・・

データベースを管理するためのシステム(ソフトウェア)がDBMSで
DBMSを定義、操作する言語がSQLですよね?
で、DBMSにはOracle、フリーのFirebirdなどがあり
SQL言語にはPostgreQL、MySQLがあるって考えで合ってますか?
また、現在は只のSQLって言語は使用されてるんですか?
986NAME IS NULL:04/12/15 11:05:07 ID:???
>>985
>データベースを管理するためのシステム(ソフトウェア)がDBMSで
>DBMSを定義、操作する言語がSQLですよね?

は、まぁそれでいいとして、

>で、DBMSにはOracle、フリーのFirebirdなどがあり
>SQL言語にはPostgreQL、MySQLがあるって考えで合ってますか?

は、禿しく勘違い。そこに上げたのは全てDBMSの製品名で、
それぞれに国際標準規格(ISO-SQL)±αのSQLが載っている。
987NAME IS NULL:04/12/15 16:54:26 ID:???
釣りだといいな…
988NAME 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 の指定が出来ないので、うまくいきません。

何か良い方法はないでしょうか?
989NAME IS NULL:04/12/15 18:17:20 ID:???
>>988
SELECT DISTINCT A.name,B.keyword FROM A JOIN B USING(id);
でいいのか? なんか、それ以前に(ry
990NAME 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.他の方法で実現する方法
を教えていただけないでしょうか。
よろしくお願いします。
991990: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;
です。
どなたかよろしくお願いします。
992NAME IS NULL:04/12/15 19:57:17 ID:???
>>991
SELECT ORDER.SECTION, Sum(ORDER.ACCOUNT) AS Total
FROM ORDER
GROUP BY ORDER.SECTION
ORDER BY Total DESC;
で、どぉ。
993NAME IS NULL:04/12/15 20:51:01 ID:???
>>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じゃねえかよ。
994NAME IS NULL:04/12/15 21:20:04 ID:PR2HhgMt
次スレを立ててみますた。

SQL質疑応答スレ Part 2
http://pc5.2ch.net/test/read.cgi/db/1103113155/
995NAME IS NULL:04/12/15 22:30:48 ID:???
>>966
ご指摘どもです。現在はDELETEを使っています。
http://dev.mysql.com/doc/mysql/ja/Implicit_commit.html
を参考にしました。
996NAME IS NULL:04/12/16 02:17:36 ID:???
まだ他に質問スレが残ってるからそこに移動してもよかったろうに。
まあいいけどさ。
997NAME IS NULL:04/12/16 03:45:18 ID:???
>>996
次スレでいきなりレプリケーションみたいなネタが着てるけど、
このスレは、ストアド類もなしに出来ればベンダーに依存しない
純粋なSQLネタがいいな。

質問者が元のテーブル等と、期待する結果のサンプルを出して、
答える人がSQLだけを考えるみたいな。
998991:04/12/16 09:54:11 ID:OCa5514Y
スレが残り少ないのでまとめレスで失礼します。
>>992
試した結果、「(ORDER BYにある)○○(列名)なんて知らない。」
と言われてしまいました。
>>993
アドバイスの通り、ビューで対応したく思います。

お二方、みなさん、アドバイスありがとうございました。
999NAME IS NULL:04/12/16 11:56:17 ID:???
1000ならE.F.コッド復活
1000NAME IS NULL:04/12/16 11:56:37 ID:???
1000ならE.F.コッド復活しない
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。