(答) select A.ID, A.DATE, A.DATA from TableName A inner join (select ID, max(DATE) as MAX_DATE from TableName group by ID ) B on A.ID = B.ID and A.DATE = B.MAX_DATE ; 0005NAME IS NULL2016/07/10(日) 22:31:14.13ID:??? よくある質問2
(問) key data ---------------- 1 a 1 a 1 b 1 b 1 a 2 b 2 a 2 a
(答) SELECT key, SUM(CASE data WHEN 'a' THEN 1 END) AS a, SUM(CASE data WHEN 'b' THEN 1 END) AS b FROM table GROUP BY key ORDER BY key ; 0006NAME IS NULL2016/07/10(日) 22:34:14.23ID:??? よくある質問3
(問) ID HOGE 01 A 01 B 01 C 02 A 03 B
HOGEをAもBもCも持っている、ID:01だけ取り出すにはどうすればよかですか
(答1) SELECT id FROM TableName WHERE hoge in ('A','B','C') GROUP BY id HAVING count(DISTINCT hoge) = 3 ;
(答2) select * from TableName T1 where not exists (select * from (values 'A', 'B', 'C') T2 (HOGE) where not exists (select * from TableName T3 where T1.ID = T3.ID and T2.HOGE = T3.HOGE ) ) ; ※valuesの部分(Table Value Constructor)はDBMSによって文法がかなり違うので注意 0007NAME IS NULL2016/07/10(日) 22:34:59.82ID:??? よくある質問4
This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data. 0009NAME IS NULL2016/07/10(日) 22:47:49.09ID:??? SQLソースの部分は外しておきます。
どうしてもやりたければ以下のような方法もなくはないですが、 再帰問合せの本来の使い方ではありません。 やめておくことを強くお奨めします。 (PostgreSQLのgenerate_series()関数なら辛うじてセーフかもしれませんが 賛否の分かれるところでしょう。) 0010NAME IS NULL2016/07/10(日) 22:49:00.82ID:??? 以上、テンプレ終わり
よくある質問5のSQLソース部分がアタックと受け止められてしまいました。 そのためソースは省略しました。 0011NAME IS NULL2016/07/14(木) 01:37:12.31ID:??? ここで募集するのも筋違いだとおもうけど、SQLの文を書いたのを訂正してほしい・・・ 中級者には30分ほどでおわる内容かも。 謝礼は7000で、 多分、チョー簡単。 詳しくは remorse2015@yahoo.co.jp 日曜までとりあえず募集します。 メールで内容確認だけでも良いです/ 0012NAME IS NULL2016/07/14(木) 03:19:38.54ID:??? ここに内容書けば無料なんだけど 0013NAME IS NULL2016/07/15(金) 02:26:47.07ID:???>>12 お願いできないですか? ワードに見本表と完成表があってコード書かれているんですが、間違えてる文がある感じです。22ページあったんですが16から全然進まなくて、、、 とりあえず、メールお願いします。 ワードファイル添付しておくります。 支払いはすぐやります。 0014NAME IS NULL2016/07/15(金) 09:39:41.81ID:??? プレーンテキストでここに貼って 0015NAME IS NULL2016/07/15(金) 10:18:31.95ID:??? ワードファイル送りつけられても迷惑メールからのゴミ箱インよ 0016NAME IS NULL2016/07/15(金) 11:41:49.64ID:??? SELECT * FROM 氏名表 AS A WHERE A.番号= (SELECT 番号 FROM 成績表 WHERE 点数=479)
SELECT *FROM 氏名表 AS A WHERE A.番号IN (SELECT 番号 FROM 成績表 WHERE 点数>=500) という間違った文があって SELECT * FROM 氏名表 AS A INNER JOIN (SELECT 番号 FROM 成績表 WHERE 点数=479) AS B ON A.番号=B.番号
SELECT * FROM 氏名表 AS A INNER JOIN (SELECT 番号 FROM 成績表 WHERE 点数>=500) AS B ON A.番号=B.番号 を治すというものでこんなのを20個くらいやれば終わりです。 0017NAME IS NULL2016/07/15(金) 13:52:48.16ID:??? 金もらって引き受けるほどの仕事じゃないようだし そういう手間かけるくらいなら、ご自身で治した方が良いのでは? 0018NAME IS NULL2016/07/15(金) 14:14:56.18ID:??? > SELECT *FROM 氏名表 AS A > WHERE A.番号IN > (SELECT 番号 > FROM 成績表 > WHERE 点数>=500)
これは何が間違ってるんだ? 0019NAME IS NULL2016/07/15(金) 14:20:47.03ID:??? 要件を教えて欲しいのだが。何を直せばいいいんだ? 0020NAME IS NULL2016/07/15(金) 15:30:39.87ID:???>>16 inをjoinに置き換えろって話のようにみえるけど joinしたビュー作っとけばもっと楽かもしれんぞ
そもそもそんなことする必要があるのか 一度inとjoinで実行計画見といた方が良いんじゃね
>>18 文法的に間違ってるってなら、番号とINの間に空白がないとかじゃねw 0021NAME IS NULL2016/07/15(金) 15:46:23.35ID:zBhn779u これについてはインラインビュー(FROM句の副問い合わせ)はやめた方がいいな。
WHERE句で絞った方がいい。 0022NAME IS NULL2016/07/15(金) 16:18:18.22ID:??? 同感 0023NAME IS NULL2016/07/15(金) 16:41:58.02ID:??? 実行計画見るまでもないレベルのデータ量な気がするが。 何やっても数百ms程度で戻る気が。 0024NAME IS NULL2016/07/15(金) 16:57:08.32ID:???>>21 その理由は? 単なる性能的な話なら、まず実行計画見るよって事だし
まあどんなクエリ書こうがたいしたことないと思うが、性能云々ならindexを貼るくらいでいいのでは。 0026NAME IS NULL2016/07/15(金) 18:52:57.55ID:OwU9VU0D 答えたい気持ちは分かるがお前ら7000円をどうやって分けるつもりなの? そういう事は最初にキッチリ決めとかないと後々遺恨を残すぜ 0027NAME IS NULL2016/07/15(金) 19:15:33.39ID:??? 僕のために争ってくれてありがとう。 依頼する人は見つけたから大丈夫だよー これで単位も一安心 0028NAME IS NULL2016/07/15(金) 19:51:07.64ID:zBhn779u>>24 理由も何もまずはSQLの普通の書き方しろってことだよ。 0029NAME IS NULL2016/07/15(金) 19:53:41.17ID:zBhn779u>>24 INリストには数の制限があるからな。
OR条件の羅列にすぎない。 0030NAME IS NULL2016/07/15(金) 20:33:15.50ID:OwU9VU0D>>29 お前はバカなんだから口を慎しめと何度 0031NAME IS NULL2016/07/16(土) 17:02:32.57ID:IKSp3mrg>>30 どこが間違っているのか教えてください。 0032NAME IS NULL2016/07/16(土) 17:08:06.50ID:IKSp3mrg ↓これ何?
26 NAME IS NULL 2016/07/15(金) 18:52:57.55 ID:OwU9VU0D 答えたい気持ちは分かるがお前ら7000円をどうやって分けるつもりなの? そういう事は最初にキッチリ決めとかないと後々遺恨を残すぜ 0033NAME IS NULL2016/07/17(日) 21:52:20.05ID:N1m3wNQ4 すみません、以下、質問させてください。
普通にA、B、Cを結合しただけでは B×Cの組み合わせまで取得してしまい上手く取得できませんでした。 A:B、A:Cと別々に結合して取得するしかないのでしょうか。 DBはOracleです、よろしくお願いします。 0034NAME IS NULL2016/07/17(日) 22:41:52.05ID:2o6ZRKeT>>33 リレーションの説明がありませんので、答えようがありません。 0035NAME IS NULL2016/07/17(日) 22:58:48.06ID:??? B×Cの中から自分が欲しいものを条件で絞り込むんだよ。その条件が無いから全部出てくる。 0036NAME IS NULL2016/07/17(日) 23:00:32.84ID:N1m3wNQ4>>34 下のような感じです。 AとB、AとCが主キー項目aでそれぞれ1:5、1:20で紐付きます。
Aテーブル a C(5) …
Bテーブル a C(5) b C(5) …
Cテーブル a C(5) c C(5) … 0037NAME IS NULL2016/07/17(日) 23:02:11.09ID:fmLQHPFo おもしろい展開w 0038NAME IS NULL2016/07/17(日) 23:41:31.84ID:??? 質問がいまいち理解できん そもそもIOとか、SQL書いたとおりに実行されるわけじゃないんだが
ほしい結果がABとACの二つあるなら、2回やるしかないわけだが、どんな結果を望んでるんだ 0039NAME IS NULL2016/07/18(月) 00:53:22.27ID:EKBnHgrJ>>38 俺もI/Oについては突っ込みたかったが、そもそもRDBの理論、概念を否定する内容だからスルーしたw 0040NAME IS NULL2016/07/18(月) 00:55:52.42ID:EKBnHgrJ>>36 その"C(5)"って何?
データ型? 0041NAME IS NULL2016/07/18(月) 01:03:46.13ID:EKBnHgrJ>>36 その3つのテーブルをaという列だけで結合すればいい話なのかな?
Aテーブルの1レコードに対して20レコードがセットになればいいの? 0042NAME IS NULL2016/07/18(月) 01:12:13.04ID:EKBnHgrJ BテーブルとCテーブルにリレーション、関連性があるのかないのかはっきりしてくれ。
どっちなの? 0043NAME IS NULL2016/07/18(月) 01:17:58.22ID:??? unionの話じゃないのかい 0044NAME IS NULL2016/07/18(月) 03:30:28.74ID:Dk5LLrvU>>39 RDBの理論が分かってないのはお前な 0045NAME IS NULL2016/07/18(月) 06:25:57.47ID:EKBnHgrJ>>44 それはRDBMSのことであって特定の製品を指しているわけでもない。 0046NAME IS NULL2016/07/18(月) 08:25:50.10ID:Dk5LLrvU>>45 ワケ分からん事言ってないで必死でググって顔真っ赤にして感謝しろよw 今頃もう真っ赤っ赤かなw 0047NAME IS NULL2016/07/19(火) 00:50:27.43ID:yVILcX3x RDBMSはSQLの処理の方法にRDBMSに任せるのがRDBなんだよ。
どう処理するかの手続きを指定するのはするのはRDBではない。 0048NAME IS NULL2016/07/19(火) 03:30:05.15ID:??? とりあえず書き込む前に書こうまず読み直してとりあえず書こう 0049NAME IS NULL2016/07/19(火) 04:19:10.59ID:??? 慌てないで、落ち着いて 0050NAME IS NULL2016/07/20(水) 11:14:56.42ID:89VCRaWj 【BS11:エンターテイメント】 <関根勤 KADENの深い夜>放送時間:毎週木曜日 よる11時00分〜11時30分 #bs11 http://www.bs11.jp/entertainment/5749/0051NAME IS NULL2016/07/24(日) 10:41:37.30ID:??? あ 0052NAME IS NULL2016/07/27(水) 21:37:51.21ID:OesecO5v ジョインで連結しまくったクエリに ORDER BY で並び替えかけると えらい遅くなるのですが 改善する方法はないのでしょうか? 0053NAME IS NULL2016/07/27(水) 21:48:05.62ID:??? ジョインしたかどうかとソートの速度に関係はない ソートのキーとなる列にインデックスを張っておけばソートが不要になる場合がある ソートキーが複数のテーブルに跨るとすると話は面倒臭い VIEWにインデックスを張れるDBMSならそれで解決するのも手 0054NAME IS NULL2016/07/27(水) 21:58:01.84ID:??? 的確。 0055NAME IS NULL2016/07/27(水) 22:33:44.35ID:OesecO5v>>53 インデックスの貼り方がわるいのか リレーションに関するカラムを中心に インデックスはっても遅いんです。 特に GROUP BY と ORDER BY の組みあわせ 0056NAME IS NULL2016/07/27(水) 22:52:26.24ID:??? GROUP BYもあるならmaterialized viewにしてインデックス張るしかないかな メモリをひたすら積んでメモリソートでごり押しという手もあるが 0057NAME IS NULL2016/07/27(水) 23:13:51.10ID:??? テーブルレイアウトと実行してるSQL全部書けば ある程度汎用的なインデックスのアドバイスができるかもしれんが
まあとりあえず実行計画確認しろ 0058NAME IS NULL2016/07/27(水) 23:27:08.61ID:??? 【質問テンプレ】 ・DBMS名とバージョン
この辺も書いておくといいぞ 0059NAME IS NULL2016/07/28(木) 00:48:24.45ID:Pc5r9mq6 テーブルレイアウトって言葉はやめてほしいわ。 0060NAME IS NULL2016/07/28(木) 10:49:25.87ID:??? うちのダイニングのテーブルの配置はどう言ったらいいでしょうか 0061NAME IS NULL2016/07/28(木) 14:59:33.90ID:??? 粗大ゴミの回収に出す 0062NAME IS NULL2016/07/29(金) 09:54:35.19ID:SbaxQ6kv MySQL 5.1.73 次のようなカラムの入ったメインテーブルがあるとします。
この例で行くと田中が3つになります。 また、 WHERE でTITLE、COMMENTが検索対象にできるようになります。
10件表示とか リストで出力すると この例では田中が3つでてきてしまうので GROUP BY で ID をまとめます。 その際 ORDER BYをかけると 何千件とかになると パフォーマンスが非常に落ちてしまいます。 ※ ORDER BYがなければパフォーマンスはそれほど問題はありません。
パフォーマンスをなるべく落ちないように 縦持ちカラムを組み合わせるにはどうすればいいでしょうか? 0063NAME IS NULL2016/07/29(金) 10:09:10.29ID:??? それだとGROUP BYよりEXISTSのほうがよくね?
select T1のカラム from T1 where exists ( select * from T2 where T1.MAIN_ID = T2.MAIN_ID and T2の条件 ) order by T1のカラム 0064NAME IS NULL2016/07/29(金) 14:04:30.63ID:??? >62 >GROUP BY で ID をまとめます。 それだとIDと1:1に結び付かない項目は全て不定だぞ つまり結局T1のみselectするのと同じになるわけだが それならまずはT1のソート項目にインデックス張って見るとか
ああ、またMySqlか SelectとGruop ByとOrder ByとWhereと全部書いたフルのSQL晒せ 0065NAME IS NULL2016/07/30(土) 07:56:46.82ID:XyUbordV ない項目のインデックスはどうやって作るのか 0066NAME IS NULL2016/07/30(土) 08:19:54.62ID:??? ない項目ってどういう意味だ? インデックスは項目(の組み合わせ)に対して作るものだぞ 0067NAME IS NULL2016/07/31(日) 02:18:28.80ID:??? 質問です。 学生メール表 学籍番号 氏名 メールアドレス 教員メール表 教員番号 氏名 メールアドレス 補習予定表 教員番号 授業id 日付 連絡事項 授業名表 授業iD 授業名 授業展開表 教員番号 授業id 学籍番号 これで生徒に知らせる時のER図をつくるとき、 いらない情報はどれですか? 学生メール表⇔授業中展開表⇔授業名表⇔補習予定表 0068NAME IS NULL2016/07/31(日) 09:46:00.41ID:???>>67 自分で決める事では 0069NAME IS NULL2016/07/31(日) 12:33:09.87ID:ea2io0T3>>67 必要最低限にしてもいいけど、実際にはいちいち結合しないと取得できないので重複して持つこともある。 0070NAME IS NULL2016/07/31(日) 14:20:50.26ID:??? ちなみに>>67はおかしいですか? 先生にしらせるときと生徒に知らせる時でER図を書きなさいって問題なんですが 0071NAME IS NULL2016/07/31(日) 16:02:20.51ID:??? 問題に書いてあることを誤読や読み落とししている気がする。 0072NAME IS NULL2016/07/31(日) 17:31:55.47ID:??? 宿題を堂々とここに書いて教えろと要求かぁ 0073NAME IS NULL2016/07/31(日) 21:26:13.43ID:??? まずER図書いてみろって話だが
エスパーすると授業展開表.教員番号か補習予定表.教員番号
各テーブルの主キーが不明なんでどっちにしろ正確な答えはだぜんぞ 0074NAME IS NULL2016/08/08(月) 22:56:12.48ID:??? ・DBMS名とバージョン SQLServer2014 ent.
・テーブルデータ 名前 月 欠席日数 a 1 1 a 3 1 b 1 1
・欲しい結果 名前 月 欠席日数 a 1 1 a 2 0 a 3 1 b 1 1 b 2 0 b 3 0
結局は>>77さんの通りにやってるだけだし、件数が多ければやってられんw 0080NAME IS NULL2016/08/09(火) 10:03:52.74ID:??? select id , name , case name when "aaa" then 1 when "ddd" then 2 else null end as newcol from hogehoge order by newcol is null; 0081NAME IS NULL2016/08/09(火) 18:34:23.83ID:???>>74 普通は名前のマスタテーブル用意しとくんじゃね まあ、なければないで効率とか考えないなら select distinct 名前 from ... とかで代用できなくもないけど