933 :
NAME IS NULL:2010/05/20(木) 22:22:35 ID:GTmF0xlD
DEFENDANT GUILT JOROR
-----------+-------+--------
HOGE | 1 | FOO
HOGE | 0 | BAR
HOGE | 1 | BAZ
FUGA | 1 | FOO
FUGA | 1 | BAR
FUGA | 1 | BAZ (T_JUDGEテーブル)
上記のテーブルにDEFENDANTで絞込をかけた結果、GUILTに一つでも0がある場合
1行も取得せず、全部1の場合はそのまま一覧を返す場合どのようなSQLを書けば
よいでしょうか?この場合、HOGEで絞り込むと0行、FUGAなら3行と言う具合です。
DBMSはMySQL5.0.67です。
select *
from T_JUDGE A
where not exists (select *
from T_JUDGE B
where A.DEFENDANT = B.DEFENDANT
and B.GUILT = 0)
;
テーブル tb_mastr tb_office tb_area
master_id office_code area_code
name office_name area_name
office_id
area_id
のテーブルがあり、office_idでtb_officeのoffice_nameを取得し、area_idでtb_areaのarea_nameを
取得したいのですが、2つ以上のテーブルを結合?させる場合どのように記述すれば
いいのでしょうか?
1対1なら以下の記述でできるのですが、同時にarea_idにarea_codeを割り当てる記述が
見つからなくて困っています。
SELECT tb_mastr.master_id, tb_mastr.name, tb_mastr.office_name FROM
tb_mastr LEFT JOIN tb_office ON tb_mastr.office_id=tb_office.office_code
その後ろにもう1個JOIN書けばいいだけなんだが
937 :
922:2010/05/22(土) 09:48:02 ID:???
>>931,932
お礼が遅くなりました。MSのサイトとかと参考に自力でがんばってみます。
ありがとうございました。
Mac(10.6)にphpMyAdminを入れたのですが、パスワードがわからず
ブラウザからログインができません。どのように設定すれば良いのでしょうか?
はい、次。
Mac(10.6)にphpMyAdminを入れたのですが、パスワードがわからず
ブラウザからログインができません。どのように設定すれば良いのでしょうか??
num0からnum50までの連番でフィールドがあるのですが、
この中で、レコードの値が0より大きいものをSELECTするにはどうしたらいいでしょうか?
ワイルドカード的な書き方はないのでしょうか?
「レコードの値が」ってどういう意味やら。
num0〜50のどれかが0より大きかったらって意味か?
num0が0より大きい または num1が0より大きい または・・・ num50 が0より大きい
ってこと?
まあorで並べるしかないわな
まずテーブルを最適化しろって言いたくなるような質問だなあ。
>>946でFAだと思う。
全部足して > 0
全部足した結果がminより大きかったら。
全部足してっていうのが動作するのは状況が限られるだろ
マイナスの値がないこと、nullがないこと、他には?
全部足しても桁あふれしないこと、か
質問です。
SELECT COUNT(*)
FROM TABLE
より、
SELECT COUNT(COL_NAME)
FROM TABLE
の方がDBの処理は軽くなると先輩社員に聞きました。
処理時間に違いはないと思うのですが、どうでしょうか。
>>953 あなたの使っているDBMSによります。
昔のDBMSは、そうした方が速くなるものがありました。
最近のDBMSであればもう解決済みで、ほぼ問題ないはずです。
一番の答えは実際に計測することですね。
…俺がついつい後者で書いてしまうのは悪い癖orz
>>953 MySQL/InnoDBだとそうなると聞いたことはある。
ほんとにそうなのかどうかは確かめていない。
956 :
953:2010/05/24(月) 12:07:20 ID:???
>>954-955 確かにレコード数に左右されそうですね。
その時に使っていたDBはOracle9iでした。
最新のDBであれば、実感として変わらないという思いは変わりません。
機械があれば計測してみます。
>>953 COL_NAMEがNULLを含んでいる場合に結果が変わってくるのはわかるよね?
NULLを許可している場合にNULLチェックが必要になる関係で後者が遅くなる処理系がある。
>>956 誰もレコード数に左右されるとは書いてないが
959 :
953:2010/05/24(月) 18:54:02 ID:???
うう、誤解を招く発言をしてしまい申し訳ありません。
精進します。
960 :
NAME IS NULL:2010/05/25(火) 00:31:12 ID:sUe75wMv
ID|A|B|C|
---------
1 |1|2|3|
2 |3|4|5|
3 |7|8|9| (テーブルFOO)
select FOO.ID,FOO.C from FOO,(select 1 AS EXPR) AS A
where FOO.A = A.EXPR or FOO.B = A.EXPR or FOO.C = A.EXPR;
こんなかんじで得たCの内容を1のところにセットして
該当するIDとCを全てリストアップするSQLはどう書けばよいでしょうか?
MySQL 5.0.67です。ストアドの作成権限はないです。
>>960 意味がワカラン。
a,b,cいずれかに1がある行のidとaを抽出ってことでもないんだろ?
エスパーしようと思ったが意味わからないなw
まず
何がやりたいのか を整理して
日本語 で説明してくれ。
SELECT * FROM HOGE WHERE A > 100 OR IN (1,2,3,4,5)
と
SELECT * FROM HOGE WHERE A > 100
UNION
SELECT * FROM HOGE WHERE IN (1,2,3,4,5)
ではどちらが軽いでしょうか?
構文ミスを除けば一般に前者
後者はソートが発生する
>>960 俺がエスパーするに
A,B,Cのカラムのいずれかが1であった場合、その1だったカラムの内容をCの値で更新する
実際に更新するSQLと更新対象をリストアップするSQLは?
だとみた
リストアップは
select ID,C from FOO where A=1 or B=1 or C=1
でいいんじゃね。AもBも対象だったら2行だせとかだとまた話は別だが
更新は
update FOO set A=C where A=1
update FOO set B=C where B=1
の2行かな。CをCで更新しても意味ないからな
で、この三つを同一トランザクションで流せばいいんじゃないかと
立ててみる。しばし待たれ。
972 :
NAME IS NULL:2010/05/27(木) 23:09:36 ID:JLDVw0sK
こっちを先に消費すること。
そもそもこれまでのスレ速度考えたら967で次スレ検討とか見積もり甘すぎでしょ。
質問です。
テーブル設計も質問してもいいんでしょうか?
社内に聞ける人間がいなくて、悩んだ時期が自分にありました。
それ用のスレは過疎っているように思うからここでもいいんじゃない?
おお、スレッドあるんですね。
ありがとうございました。
スレ違い
979 :
NAME IS NULL:2010/06/01(火) 23:54:28 ID:4+IIsIOo
テーブルの外部キー制約において、現在ON DELETE RESTRICTとなっているところをCASCADEに変更したいのですが、
運用中なのでDROPできないのでALTERで変更したいのですが、どのように書けばよいでしょうか。
MySQL5.0です。
hosyu
そこはUPDATE