板検索:
SQL質疑応答スレ 17問目 (186)
まとめビュー
1
NAME IS NULL[sage]   投稿日:2016/07/10 22:29:01  ID:???.net(144)
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。

SQLという言語はISOによって標準化されていますが
この標準を100%実装したDBMSは存在せず、
また、DBMSによっては標準でない独自の構文が
追加されていることもあります。

質問するときはDBMS名を必ず付記してください。

【質問テンプレ】
・DBMS名とバージョン
・テーブルデータ
・欲しい結果
・説明

前スレ:
SQL質疑応答スレ 16問目
コメント1件


2
NAME IS NULL[sage]   投稿日:2016/07/10 22:29:31  ID:???.net(144)

3
NAME IS NULL[sage]   投稿日:2016/07/10 22:30:30  ID:???.net(144)

4
NAME IS NULL[sage]   投稿日:2016/07/10 22:30:52  ID:???.net(144)
よくある質問1

(問)
ID | DATE     | DATA
--+----------+-----
1 | 2007-11-11 | aaa
2 | 2007-11-11 | bbb
1 | 2007-11-10 | ccc
3 | 2007-11-12 | ddd
3 | 2007-11-11 | eee
4 | 2007-11-10 | fff
1 | 2007-11-12 | ggg

このようなテーブルから、下記のように

1 | 2007-11-12 | ggg
3 | 2007-11-12 | ddd
2 | 2007-11-11 | bbb
4 | 2007-11-10 | fff

各idに対して最新の1件だけ抽出するSQLの書き方を教えてください。

(答)
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
;

5
NAME IS NULL[sage]   投稿日:2016/07/10 22:31:14  ID:???.net(144)
よくある質問2

(問)
key   data
----------------
1     a
1     a
1     b
1     b
1     a
2     b
2     a
2     a

というテーブルから

key   a   b
--------------------
1    3   2
2    2   1

というExcelのピボットの様なデータを取得したいのですが、どういうSQLになりますか?
a,bというのは固定なので、仮にcというデータがあっても無視して構いません。

(答)
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
;

6
NAME IS NULL[sage]   投稿日:2016/07/10 22:34:14  ID:???.net(144)
よくある質問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によって文法がかなり違うので注意

7
NAME IS NULL[sage]   投稿日:2016/07/10 22:34:59  ID:???.net(144)
よくある質問4

(問)
列の数が可変な問合せはどう書きますか?

(答)
標準SQLでは書けません。
pivotという機能を搭載したDBMSなら一見書けそうですが実はやっぱり書けません。
Oracle 11g以降でpivot xmlというキーワードを使用すれば一応可変っぽくはなります。
が、素直にプロシージャを書くかアプリケーションで処理したほうが良いでしょう。

SQL Serverのpivot(2005以降)
http://msdn.microsoft.com/ja-jp/library/ms177410.aspx

Oracleのpivot(11g以降)
http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/statement...#CHDCEJJE
http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.htm...

8
NAME IS NULL[sage]   投稿日:2016/07/10 22:46:13  ID:???.net(144)
ううむ、ブロックされてしまいました。どうしたらいいだろう。

Why have I been blocked?

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.

9
NAME IS NULL[sage]   投稿日:2016/07/10 22:47:49  ID:???.net(144)
SQLソースの部分は外しておきます。

よくある質問5

(問)
年月(YYYYMM)を指定し、その年月に対応する年月日を取得したい

 例:201006を指定したら、以下の結果を得たい

   20100601
   20100602
    ・
    ・
    ・
   20100630

(答)
SQLでは存在しないデータを生成することはできません。
この問いの場合は素直にカレンダーテーブルを用意しましょう。

どうしてもやりたければ以下のような方法もなくはないですが、
再帰問合せの本来の使い方ではありません。
やめておくことを強くお奨めします。
(PostgreSQLのgenerate_series()関数なら辛うじてセーフかもしれませんが
 賛否の分かれるところでしょう。)

10
NAME IS NULL[sage]   投稿日:2016/07/10 22:49:00  ID:???.net(144)
以上、テンプレ終わり

よくある質問5のSQLソース部分がアタックと受け止められてしまいました。
そのためソースは省略しました。

11
NAME IS NULL[sage]   投稿日:2016/07/14 01:37:12  ID:???.net(144)
ここで募集するのも筋違いだとおもうけど、SQLの文を書いたのを訂正してほしい・・・
中級者には30分ほどでおわる内容かも。
謝礼は7000で、
多分、チョー簡単。
詳しくは
remorse2015@yahoo.co.jp
日曜までとりあえず募集します。
メールで内容確認だけでも良いです/

12
NAME IS NULL[sage]   投稿日:2016/07/14 03:19:38  ID:???.net(144)
ここに内容書けば無料なんだけど
コメント1件

13
NAME IS NULL[sage]   投稿日:2016/07/15 02:26:47  ID:???.net(144)
>12
お願いできないですか?
ワードに見本表と完成表があってコード書かれているんですが、間違えてる文がある感じです。22ページあったんですが16から全然進まなくて、、、
とりあえず、メールお願いします。
ワードファイル添付しておくります。
支払いはすぐやります。

14
NAME IS NULL[sage]   投稿日:2016/07/15 09:39:41  ID:???.net(144)
プレーンテキストでここに貼って

15
NAME IS NULL[sage]   投稿日:2016/07/15 10:18:31  ID:???.net(144)
ワードファイル送りつけられても迷惑メールからのゴミ箱インよ

16
NAME IS NULL[sage]   投稿日:2016/07/15 11:41:49  ID:???.net(144)
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個くらいやれば終わりです。
コメント1件

17
NAME IS NULL[sage]   投稿日:2016/07/15 13:52:48  ID:???.net(144)
金もらって引き受けるほどの仕事じゃないようだし
そういう手間かけるくらいなら、ご自身で治した方が良いのでは?

18
NAME IS NULL[sage]   投稿日:2016/07/15 14:14:56  ID:???.net(144)
> SELECT *FROM 氏名表 AS A
> WHERE A.番号IN
> (SELECT 番号
> FROM 成績表
> WHERE 点数>=500)

これは何が間違ってるんだ?
コメント1件

19
NAME IS NULL[sage]   投稿日:2016/07/15 14:20:47  ID:???.net(144)
要件を教えて欲しいのだが。何を直せばいいいんだ?

20
NAME IS NULL[sage]   投稿日:2016/07/15 15:30:39  ID:???.net(144)
>16
inをjoinに置き換えろって話のようにみえるけど
joinしたビュー作っとけばもっと楽かもしれんぞ

そもそもそんなことする必要があるのか
一度inとjoinで実行計画見といた方が良いんじゃね

>18
文法的に間違ってるってなら、番号とINの間に空白がないとかじゃねw

21
NAME IS NULL[]   投稿日:2016/07/15 15:46:23  ID:zBhn779u.net(3)
これについてはインラインビュー(FROM句の副問い合わせ)はやめた方がいいな。

WHERE句で絞った方がいい。
コメント1件

22
NAME IS NULL[sage]   投稿日:2016/07/15 16:18:18  ID:???.net(144)
同感

23
NAME IS NULL[sage]   投稿日:2016/07/15 16:41:58  ID:???.net(144)
実行計画見るまでもないレベルのデータ量な気がするが。
何やっても数百ms程度で戻る気が。
コメント1件

24
NAME IS NULL[sage]   投稿日:2016/07/15 16:57:08  ID:???.net(144)
>21
その理由は?
単なる性能的な話なら、まず実行計画見るよって事だし

whereがどうこうじゃなくて、inの方だと、結果セットに点数含まれないのが問題なんじゃないのか

>23
データ量は示されてないし、実際のテーブルレイアウトがどうなってるかもわからんし
まあ、性能的な問題じゃないと思うけど
コメント3件

25
NAME IS NULL[sage]   投稿日:2016/07/15 17:22:52  ID:???.net(144)
>24
> データ量は示されてないし、実際のテーブルレイアウトがどうなってるかもわからんし
> まあ、性能的な問題じゃないと思うけど
氏名表:1,000レコード未満
成績表:100,000レコード未満
くらいかなと。

まあどんなクエリ書こうがたいしたことないと思うが、性能云々ならindexを貼るくらいでいいのでは。

26
NAME IS NULL[]   投稿日:2016/07/15 18:52:57  ID:OwU9VU0D.net(2)
答えたい気持ちは分かるがお前ら7000円をどうやって分けるつもりなの?
そういう事は最初にキッチリ決めとかないと後々遺恨を残すぜ

27
NAME IS NULL[sage]   投稿日:2016/07/15 19:15:33  ID:???.net(144)
僕のために争ってくれてありがとう。
依頼する人は見つけたから大丈夫だよー
これで単位も一安心

28
NAME IS NULL[]   投稿日:2016/07/15 19:51:07  ID:zBhn779u.net(3)
>24
理由も何もまずはSQLの普通の書き方しろってことだよ。

29
NAME IS NULL[]   投稿日:2016/07/15 19:53:41  ID:zBhn779u.net(3)
>24
INリストには数の制限があるからな。

OR条件の羅列にすぎない。
コメント1件

30
NAME IS NULL[]   投稿日:2016/07/15 20:33:15  ID:OwU9VU0D.net(2)
>29
お前はバカなんだから口を慎しめと何度
コメント1件

31
NAME IS NULL[]   投稿日:2016/07/16 17:02:32  ID:IKSp3mrg.net(2)
>30
どこが間違っているのか教えてください。

32
NAME IS NULL[]   投稿日:2016/07/16 17:08:06  ID:IKSp3mrg.net(2)
↓これ何?

26 NAME IS NULL 2016/07/15(金) 18:52:57.55 ID:OwU9VU0D
答えたい気持ちは分かるがお前ら7000円をどうやって分けるつもりなの?
そういう事は最初にキッチリ決めとかないと後々遺恨を残すぜ

33
NAME IS NULL[]   投稿日:2016/07/17 21:52:20  ID:N1m3wNQ4.net(2)
すみません、以下、質問させてください。

親テーブルAに対して子テーブルBとCがあり、
レコード数がそれぞれ、
A:B = 1:5、A:C = 1:20 の関係です。

この時、A1レコードに対して、
Aに紐付くBとCのレコード全てを最小のIO回数・データ量で取得したいです。

普通にA、B、Cを結合しただけでは
B×Cの組み合わせまで取得してしまい上手く取得できませんでした。
A:B、A:Cと別々に結合して取得するしかないのでしょうか。
DBはOracleです、よろしくお願いします。
コメント1件

34
NAME IS NULL[]   投稿日:2016/07/17 22:41:52  ID:2o6ZRKeT.net
>33
リレーションの説明がありませんので、答えようがありません。
コメント1件

35
NAME IS NULL[sage]   投稿日:2016/07/17 22:58:48  ID:???.net(144)
B×Cの中から自分が欲しいものを条件で絞り込むんだよ。その条件が無いから全部出てくる。

36
NAME IS NULL[]   投稿日:2016/07/17 23:00:32  ID:N1m3wNQ4.net(2)
>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)

コメント2件

37
NAME IS NULL[]   投稿日:2016/07/17 23:02:11  ID:fmLQHPFo.net
おもしろい展開w

38
NAME IS NULL[sage]   投稿日:2016/07/17 23:41:31  ID:???.net(144)
質問がいまいち理解できん
そもそもIOとか、SQL書いたとおりに実行されるわけじゃないんだが

ほしい結果がABとACの二つあるなら、2回やるしかないわけだが、どんな結果を望んでるんだ
コメント1件

39
NAME IS NULL[]   投稿日:2016/07/18 00:53:22  ID:EKBnHgrJ.net(5)
>38
俺もI/Oについては突っ込みたかったが、そもそもRDBの理論、概念を否定する内容だからスルーしたw
コメント1件

40
NAME IS NULL[]   投稿日:2016/07/18 00:55:52  ID:EKBnHgrJ.net(5)
>36
その"C(5)"って何?

データ型?

41
NAME IS NULL[]   投稿日:2016/07/18 01:03:46  ID:EKBnHgrJ.net(5)
>36
その3つのテーブルをaという列だけで結合すればいい話なのかな?

Aテーブルの1レコードに対して20レコードがセットになればいいの?

42
NAME IS NULL[]   投稿日:2016/07/18 01:12:13  ID:EKBnHgrJ.net(5)
BテーブルとCテーブルにリレーション、関連性があるのかないのかはっきりしてくれ。

AテーブルのとあるレコードはBテーブルに子レコードがあり、Aテーブルの別の種類のレコードはCテーブルに子レコードがあるようにも解釈できる。

どっちなの?

43
NAME IS NULL[sage]   投稿日:2016/07/18 01:17:58  ID:???.net(144)
unionの話じゃないのかい

44
NAME IS NULL[]   投稿日:2016/07/18 03:30:28  ID:Dk5LLrvU.net(2)
>39
RDBの理論が分かってないのはお前な
コメント1件

45
NAME IS NULL[]   投稿日:2016/07/18 06:25:57  ID:EKBnHgrJ.net(5)
>44
それはRDBMSのことであって特定の製品を指しているわけでもない。
コメント1件

46
NAME IS NULL[]   投稿日:2016/07/18 08:25:50  ID:Dk5LLrvU.net(2)
>45
ワケ分からん事言ってないで必死でググって顔真っ赤にして感謝しろよw
今頃もう真っ赤っ赤かなw

47
NAME IS NULL[]   投稿日:2016/07/19 00:50:27  ID:yVILcX3x.net
RDBMSはSQLの処理の方法にRDBMSに任せるのがRDBなんだよ。

どう処理するかの手続きを指定するのはするのはRDBではない。

48
NAME IS NULL[sage]   投稿日:2016/07/19 03:30:05  ID:???.net(144)
とりあえず書き込む前に書こうまず読み直してとりあえず書こう

49
NAME IS NULL[sage]   投稿日:2016/07/19 04:19:10  ID:???.net(144)
慌てないで、落ち着いて

50
NAME IS NULL[]   投稿日:2016/07/20 11:14:56  ID:89VCRaWj.net
【BS11:エンターテイメント】 <関根勤 KADENの深い夜>放送時間:毎週木曜日 よる11時00分〜11時30分 #bs11 http://www.bs11.jp/entertainment/5749/

51
NAME IS NULL[sage]   投稿日:2016/07/24 10:41:37  ID:???.net(144)

52
NAME IS NULL[]   投稿日:2016/07/27 21:37:51  ID:OesecO5v.net(2)
ジョインで連結しまくったクエリに
ORDER BY で並び替えかけると
えらい遅くなるのですが
改善する方法はないのでしょうか?

53
NAME IS NULL[sage]   投稿日:2016/07/27 21:48:05  ID:???.net(144)
ジョインしたかどうかとソートの速度に関係はない
ソートのキーとなる列にインデックスを張っておけばソートが不要になる場合がある
ソートキーが複数のテーブルに跨るとすると話は面倒臭い
VIEWにインデックスを張れるDBMSならそれで解決するのも手
コメント1件

54
NAME IS NULL[sage]   投稿日:2016/07/27 21:58:01  ID:???.net(144)
的確。

55
NAME IS NULL[]   投稿日:2016/07/27 22:33:44  ID:OesecO5v.net(2)
>53
インデックスの貼り方がわるいのか
リレーションに関するカラムを中心に
インデックスはっても遅いんです。
特に GROUP BY と ORDER BY の組みあわせ

56
NAME IS NULL[sage]   投稿日:2016/07/27 22:52:26  ID:???.net(144)
GROUP BYもあるならmaterialized viewにしてインデックス張るしかないかな
メモリをひたすら積んでメモリソートでごり押しという手もあるが

57
NAME IS NULL[sage]   投稿日:2016/07/27 23:13:51  ID:???.net(144)
テーブルレイアウトと実行してるSQL全部書けば
ある程度汎用的なインデックスのアドバイスができるかもしれんが

まあとりあえず実行計画確認しろ

58
NAME IS NULL[sage]   投稿日:2016/07/27 23:27:08  ID:???.net(144)
【質問テンプレ】
・DBMS名とバージョン

この辺も書いておくといいぞ

59
NAME IS NULL[]   投稿日:2016/07/28 00:48:24  ID:Pc5r9mq6.net
テーブルレイアウトって言葉はやめてほしいわ。

60
NAME IS NULL[sage]   投稿日:2016/07/28 10:49:25  ID:???.net(144)
うちのダイニングのテーブルの配置はどう言ったらいいでしょうか

61
NAME IS NULL[sage]   投稿日:2016/07/28 14:59:33  ID:???.net(144)
 
粗大ゴミの回収に出す

62
NAME IS NULL[]   投稿日:2016/07/29 09:54:35  ID:SbaxQ6kv.net
MySQL 5.1.73
次のようなカラムの入ったメインテーブルがあるとします。

T1
|MAIN_ID|NAME|AGE|TITLE_1|COMMENT_1|TITLE_2|COMMENT_2|

で、TITLE と COMMENT の部分は
横持ちになってるのでその部分は別テーブルにして

T2
|ID|MAIN_ID|TITLE|COMMENT|

として、縦持ちにしたいとします。

問題は、この2つのテーブルをどうリレーションさせるかです。
例えば 次のようなレコードが入っているものを次のようにリレーションしようとします。

T1
|MAIN_ID|NAME|AGE|
|1    |田中 |24|



T2
|ID|MAIN_ID|TITLE|COMMENT|
|1 |   1|好きな|うな重 |
|2 |   1|趣味 |バイク |
|3 |   1|嫌いな|しいたけ|
|4 |   2|好きな|グラタン|


FROM
 T1
 LEFT JOIN
 T2
 ON
 T1.MAIN_ID = T2.MAIN_ID

で関連付けられ 

|ID|MAIN_ID|NAME|AGE|TITLE|COMMENT|
|1 |1   |田中 |24|好きな|うな重 |
|1 |1   |田中 |24|趣味 |バイク |
|1 |1   |田中 |24|嫌いな|しいたけ|

この例で行くと田中が3つになります。
また、 WHERE でTITLE、COMMENTが検索対象にできるようになります。

10件表示とか リストで出力すると この例では田中が3つでてきてしまうので
GROUP BY で ID をまとめます。 
その際 ORDER BYをかけると 何千件とかになると
パフォーマンスが非常に落ちてしまいます。
※ ORDER BYがなければパフォーマンスはそれほど問題はありません。

パフォーマンスをなるべく落ちないように
縦持ちカラムを組み合わせるにはどうすればいいでしょうか?

63
NAME IS NULL[sage]   投稿日:2016/07/29 10:09:10  ID:???.net(144)
それだとGROUP BYよりEXISTSのほうがよくね?

select T1のカラム
from T1
where exists (
  select *
  from T2
  where T1.MAIN_ID = T2.MAIN_ID
  and T2の条件
)
order by T1のカラム

64
NAME IS NULL[sage]   投稿日:2016/07/29 14:04:30  ID:???.net(144)
>62
>GROUP BY で ID をまとめます。
それだとIDと1:1に結び付かない項目は全て不定だぞ
つまり結局T1のみselectするのと同じになるわけだが
それならまずはT1のソート項目にインデックス張って見るとか

ああ、またMySqlか
SelectとGruop ByとOrder ByとWhereと全部書いたフルのSQL晒せ

65
NAME IS NULL[]   投稿日:2016/07/30 07:56:46  ID:XyUbordV.net
ない項目のインデックスはどうやって作るのか

66
NAME IS NULL[sage]   投稿日:2016/07/30 08:19:54  ID:???.net(144)
ない項目ってどういう意味だ?
インデックスは項目(の組み合わせ)に対して作るものだぞ

67
NAME IS NULL[sage]   投稿日:2016/07/31 02:18:28  ID:???.net(144)
質問です。
学生メール表 学籍番号 氏名 メールアドレス
教員メール表 教員番号 氏名 メールアドレス
補習予定表 教員番号 授業id 日付 連絡事項
授業名表 授業iD 授業名
授業展開表 教員番号 授業id 学籍番号
これで生徒に知らせる時のER図をつくるとき、
いらない情報はどれですか?
学生メール表⇔授業中展開表⇔授業名表⇔補習予定表
コメント3件

68
NAME IS NULL[sage]   投稿日:2016/07/31 09:46:00  ID:???.net(144)
>67
自分で決める事では

69
NAME IS NULL[]   投稿日:2016/07/31 12:33:09  ID:ea2io0T3.net
>67
必要最低限にしてもいいけど、実際にはいちいち結合しないと取得できないので重複して持つこともある。

70
NAME IS NULL[sage]   投稿日:2016/07/31 14:20:50  ID:???.net(144)
ちなみに>67はおかしいですか?
先生にしらせるときと生徒に知らせる時でER図を書きなさいって問題なんですが

71
NAME IS NULL[sage]   投稿日:2016/07/31 16:02:20  ID:???.net(144)
問題に書いてあることを誤読や読み落とししている気がする。

72
NAME IS NULL[sage]   投稿日:2016/07/31 17:31:55  ID:???.net(144)
宿題を堂々とここに書いて教えろと要求かぁ

73
NAME IS NULL[sage]   投稿日:2016/07/31 21:26:13  ID:???.net(144)
まずER図書いてみろって話だが

エスパーすると授業展開表.教員番号か補習予定表.教員番号

各テーブルの主キーが不明なんでどっちにしろ正確な答えはだぜんぞ

74
NAME IS NULL[sage]   投稿日:2016/08/08 22:56:12  ID:???.net(144)
・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

・説明
 欠けてる月のデータを 0 補完したいと思います。
 「名前」列がなければ例えば下のようなテーブルと外部結合することで解決できるのですが、
 「名前」ごとに「月」と「欠席日数」を補完する方法が分かりません。
 「名前」列を含めて保管用のテーブルを作ることも考えられるのですが、「名前」の数が多い場合に困ります。
 月 欠席日数
 1     0
 2     0
 3     0

お知恵をお貸し下さい。
お願いします。
コメント1件

75
NAME IS NULL[sage]   投稿日:2016/08/08 23:54:36  ID:???.net(144)
名前テーブルも作ってそれと外部結合すりゃいいじゃん。
コメント1件

76
NAME IS NULL[sage]   投稿日:2016/08/09 00:00:01  ID:???.net(144)
id,name
--------
1,aaa
2,bbb
3,ccc

これにdddを1の下に追加して

id,name
--------
1,aaa
4,ddd
2,bbb
3,ccc

という風に出来るデータベースってありませんか? 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)

コメント2件

77
NAME IS NULL[sage]   投稿日:2016/08/09 01:13:18  ID:???.net(144)
表示をその順序にしたいと言うなら、
その順序指定になるカラムを追加したら?
コメント1件

78
NAME IS NULL[sage]   投稿日:2016/08/09 08:40:05  ID:???.net(144)
>76
> これにdddを1の下に追加して

できない
上とか下の概念がないから

79
NAME IS NULL[sage]   投稿日:2016/08/09 09:32:25  ID:???.net(144)
mysqlでやってみた

select id , name ,
case name when "aaa" then 1
when "bbb" then 3
when "ddd" then 2
when "ccc" then 4
end as newcol
from hogehoge
order by newcol;

+----+------+---------+
| id | name | newcol |
+----+------+---------+
| 1 | aaa | 1 |
| 4 | ddd | 2 |
| 2 | bbb | 3 |
| 3 | ccc | 4 |
+----+------+---------+

結局は>77さんの通りにやってるだけだし、件数が多ければやってられんw

80
NAME IS NULL[sage]   投稿日:2016/08/09 10:03:52  ID:???.net(144)
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;

81
NAME IS NULL[sage]   投稿日:2016/08/09 18:34:23  ID:???.net(144)
>74
普通は名前のマスタテーブル用意しとくんじゃね
まあ、なければないで効率とか考えないなら
select distinct 名前 from ...
とかで代用できなくもないけど

>76
すくなくとも、RDBでそれは基本的な考え方から外れてるから無理

データ補完とか、順序付けされてないデータの順序とか、設計考え直せ

82
74[sage]   投稿日:2016/08/09 23:16:58  ID:???.net(144)
>75,81
ありがとう。
75 で言われてハッとして distinct で作った名前の一覧と月の一覧とを掛け合わせて、
これと元のテーブルデータを外部結合して行けました。

83
NAME IS NULL[]   投稿日:2016/08/10 16:43:00  ID:tK4Szt1X.net
SQLと直接関係ないのですが
お名前.comSDサーバーの データベースって
sshで入って dumpコマンドでエクスポートできないので
バックアップを取ることができないのですが
なにかうまく取る方法ないですか?
コメント1件

84
NAME IS NULL[sage]   投稿日:2016/08/10 16:49:54  ID:???.net(144)
>83
お名前.com sdサーバー データベース バックアップ
でググったらすぐに見つかったが?

85
NAME IS NULL[sage]   投稿日:2016/09/24 02:19:33  ID:???.net(144)
○前提
会社id、名前や所在地などが入っている会社テーブルと、
会社id、従業員名、性別などが入っている従業員テーブルがあるとして、
(プログラム側で外部から受け取った)会社idから名前や所在地を得て、かつ、その会社の従業員を列挙表示したい

○質問
こういうとき、DB側、SQL側としては、会社テーブル・従業員テーブルそれぞれ1回ずつ2回SELECT発行するしかないでしょうか
コメント5件

86
NAME IS NULL[sage]   投稿日:2016/09/24 03:18:01  ID:???.net(144)
>85
joinを知らないとか分からないとか、そういうレベル?
とりあえず>1読んで出直して
コメント1件

87
NAME IS NULL[sage]   投稿日:2016/09/24 03:54:37  ID:???.net(144)
>86
joinすると全レコードに>85で言う会社テーブルの名前、所在地などが入ってきませんか
返してもらうデータ量よりクエリ発行回数を気にするべきなんでしょうか

また>85には書いていないことですがjoin対象が複数あったら、など考えるとどう考えたら良いのか
コメント1件

88
NAME IS NULL[sage]   投稿日:2016/09/24 07:52:00  ID:???.net(144)
>join対象が複数あったら、

複数joinすれば?

89
NAME IS NULL[sage]   投稿日:2016/09/24 11:06:44  ID:???.net(144)
深く考える前にやってみればいいんじゃないかな、とか。

90
NAME IS NULL[sage]   投稿日:2016/09/24 18:45:29  ID:???.net(144)
>87
>データ量よりクエリ発行回数を気にするべきなんでしょうか
そんなもんはケースバイケースだからすきにしろ
もともとクエリ発行回数を問題にしたのはお前だろうが

91
NAME IS NULL[sage]   投稿日:2016/09/24 21:03:47  ID:???.net(144)
>85
その前提なら
> 会社テーブル・従業員テーブルそれぞれ1回ずつ2回SELECT発行する
でいいと思う

92
NAME IS NULL[sage]   投稿日:2016/09/24 21:21:17  ID:???.net(144)
いや、1回SELECT発行がいいと思う

93
NAME IS NULL[]   投稿日:2016/09/24 21:23:50  ID:dG2/rE9U.net
この場合それぞれ2回ずつSELECTが正解じゃね?
コメント1件

94
NAME IS NULL[sage]   投稿日:2016/09/25 07:15:27  ID:???.net(144)
従業員に付与される会社情報の多さが気になるなら2回でいいんじゃね
というか自分も2回だね

95
NAME IS NULL[sage]   投稿日:2016/09/25 08:00:17  ID:???.net(144)
>93
2回ずつ?
なんのために?

96
NAME IS NULL[sage]   投稿日:2016/09/25 09:14:27  ID:???.net(144)
>85
〇足りない情報
どんなときに使う処理か(バッチ?それともユーザー操作に対する応答?)
出力はどのような形式か(画面表示?CSVファイル?)
データベースを配置しているサーバーと出力を得るクライアントの構成は?(例:PostgreSQLto
Apacheが同じサーバーにあり、クライアントはWEB表示で結果を得る。サーバーはAWSに配置しており、ネットワークの転送速度は毎秒1MBr程度が期待できる)
レコードは何件あるのか。レコードあたりの容量は?要求されるレスポンスは?(1秒以内に出力完了など)。

97
NAME IS NULL[sage]   投稿日:2016/09/25 09:19:53  ID:???.net(144)
転送速度が極端に遅い場合はローカルにデータベースをもってジョインするのも選択肢としてあり得なくもないが(2層方式も含めて検討だろう)
それだったら出力結果を圧縮して転送だろうな
HTTPで出力する場合は例えばgzip圧縮すりゃ設定いじる程度の工数で済むしな

98
NAME IS NULL[sage]   投稿日:2016/09/25 10:29:39  ID:???.net(144)
富豪アプローチで毎回取得&キャッシュでええやん。

99
NAME IS NULL[sage]   投稿日:2016/09/25 10:40:03  ID:???.net(144)
時間も掛かるし負荷も高いんじゃない?

100
NAME IS NULL[sage]   投稿日:2016/09/25 16:03:47  ID:???.net(144)
月額2000円くらいの予算でvps借りるとしてmysqlで最大どれくらいのトランザクションを捌けるもんなの?

101
NAME IS NULL[sage]   投稿日:2016/09/25 16:07:28  ID:???.net(144)
要件定義してあげるスレが必要

102
NAME IS NULL[sage]   投稿日:2016/09/30 00:05:15  ID:???.net(144)
どこで質問したらわからないんですが総合スレってありませんかね?
コメント1件

103
NAME IS NULL[sage]   投稿日:2016/09/30 14:16:58  ID:???.net(144)

104
NAME IS NULL[]   投稿日:2016/11/09 18:56:03  ID:AtwDWs/+.net(2)
Mysql で 出力データーを
20.00 → 20
21.40 → 21.4
23.05 → 23.05
20.10 → 20.1
みたいに少数以下の語尾のゼロを取ることをMySQL内ですることはできないでしょうか?
コメント1件

105
NAME IS NULL[sage]   投稿日:2016/11/09 19:00:44  ID:???.net(144)
普通付かないだろ
元の値は文字列なのか?
コメント1件

106
NAME IS NULL[]   投稿日:2016/11/09 19:05:31  ID:AtwDWs/+.net(2)
>105
decimal です。

107
NAME IS NULL[sage]   投稿日:2016/11/09 19:39:25  ID:???.net(144)
>104
なぜゼロ取りたいの?

108
NAME IS NULL[]   投稿日:2016/11/14 22:17:52  ID:bmYVZ934.net
truncとかfloorとか
文字ならsubstrみたいなやつで

109
NAME IS NULL[sage]   投稿日:2016/11/18 01:26:39  ID:???.net(144)
アドバイスをいただきたく
CFINFOテーブルのカラムが全てcharでvarcharに変更したい場合のSQLです。
数十件のデータではテストしてOKでしたが、大量のデータだと問題でそうですかね?

alter table CFINFO modify (
CF_GROUP VARCHAR2(10),
CF_NAME VARCHAR2(30),
CF_ID VARCHAR2(50),
CF_PSWD VARCHAR2(50)
)
/
update CFINFO d
set (d.CF_GROUP,d.CF_NAME,d.CF_ID,d.CF_PSWD)
= (
select trim(CF_GROUP),trim(CF_NAME),trim(CF_ID),trim(CF_PSWD)
from CFINFO m
where d.CF_NO = m.CF_NO
)
/
コメント1件

110
NAME IS NULL[]   投稿日:2016/11/21 06:49:29  ID:sXX+G/pS.net
>109
/があるあたりでOracleだと思うが、なんで並列処理化するとか考えないの?

111
NAME IS NULL[sage]   投稿日:2016/11/21 11:05:47  ID:???.net(144)
というか、ふつうにhoge=trim(hoge)で良い気がするんだが
なんで自己結合する必要があるんだ

112
NAME IS NULL[sage]   投稿日:2016/11/21 11:19:03  ID:???.net(144)
それか元のテーブルをRENAMEして
新しいテーブルにINSERT SELECTしたら?
表領域足りんのか

113
NAME IS NULL[]   投稿日:2016/11/21 18:31:53  ID:CmVzeDRz.net
mysqlの質問です

[2016-11-21 18:20:12]のような[yyyy-mm-dd HH:mi:ss]の形の値を持つdatetime型のフィールド、recordがあるのですが、
ここから2016年10月1日〜2016年10月31日の期間の9:00〜12:00のレコードのみを抽出するにはどのような命令を書けば良いでしょうか?
日付のみなら

SELECT * FROM t_open WHERE record BETWEEN '2016-06-01' AND '2016-07-01';

という簡単な形で出せたのですが、時刻を指定する方法が分からず詰まっています。
コメント1件

114
NAME IS NULL[sage]   投稿日:2016/11/21 18:43:05  ID:???.net(144)
>113
and date_format(record, '%H:%i') between '09:00' and '12:00'
コメント2件

115
NAME IS NULL[sage]   投稿日:2016/11/21 19:36:05  ID:???.net(144)
>114
できました!ありがとうございます!
date_format関数について勉強しておきます

116
NAME IS NULL[sage]   投稿日:2016/11/22 17:17:14  ID:???.net(144)
>114
こう言うのがササっと書けるようになるには何年くらいのSQL修行が必要ですか?
コメント1件

117
NAME IS NULL[sage]   投稿日:2016/11/22 18:14:09  ID:???.net(144)
>116
> こう言うのがササっと書けるようになるには何年くらいのSQL修行が必要ですか?
本読まないでしょ。
初心者でも入門書を2,3冊こなせば書けると思うよ。
コメント1件

118
NAME IS NULL[sage]   投稿日:2016/11/22 18:28:47  ID:???.net(144)
短いやつをちょっとずつ書けば慣れるけど
MySQLの方言だからねえ、、、

119
NAME IS NULL[]   投稿日:2016/11/22 19:27:21  ID:sjSydgSv.net
確かにここのレスを見ただけだとササっと書いてるように思うのも仕方がないだろう
だけど……裏では必死でググってんだぜオレたち 👀
Rock54: Caution(BBR-MD5:8368d31ad5c810f9ab23ea9fefa156d2)

120
NAME IS NULL[sage]   投稿日:2016/11/22 20:04:48  ID:???.net(144)
>117
入門書を二冊も読んだら上級者でしょ?
それもかなり上のクラスの
コメント1件

121
NAME IS NULL[sage]   投稿日:2016/11/24 15:48:27  ID:???.net(144)
sql初心者で2、3行程度の簡単なsqlしか実行した事がないんですが、世の中では何百行、何千行のsqlを実行する事もありますか?
コメント2件

122
NAME IS NULL[sage]   投稿日:2016/11/24 16:33:30  ID:???.net(144)
>120
上級者のハードル低いね
コメント1件

123
NAME IS NULL[sage]   投稿日:2016/11/24 16:40:02  ID:???.net(144)
100行程度なら描いたことがある
メンテナンス性を考えると
あまり長くしないようがいいように思う

124
NAME IS NULL[sage]   投稿日:2016/11/24 16:49:13  ID:???.net(144)
>122
相対的には上級者になるのかもねw
絶対的にはもちろん違うけど
コメント1件

125
NAME IS NULL[sage]   投稿日:2016/11/24 17:00:52  ID:???.net(144)
>124
自分がかなり上のクラスの上級者であると自己判定していて、自分のクラスになるには入門書2冊が必要だった、ということかも

126
NAME IS NULL[sage]   投稿日:2016/11/24 17:17:01  ID:???.net(144)
入門書を何冊読んでも入門書レベルの知識しかつかないという、ごくあたりまえの話

127
NAME IS NULL[sage]   投稿日:2016/11/24 20:22:40  ID:???.net(144)
>121
そんな複雑なやつを書く前にストアドとかビューを組み合わせるとかを検討する
そんなの書いたら検証がえらいことになる

128
NAME IS NULL[sage]   投稿日:2016/11/24 21:42:31  ID:???.net(144)
聞いた話でそれを見たことはないけど、1000行くらいのが出来上がったとかなんとか。
見たくもない(ある証券系のシステムでのお話)

129
NAME IS NULL[sage]   投稿日:2016/11/25 19:24:44  ID:???.net(144)
問い合わせ文じゃなくて、ややこしいストアド書くなら数百は余裕であり得るだろうけど

130
NAME IS NULL[sage]   投稿日:2016/11/25 21:18:31  ID:???.net(144)
行が増えざるを得ない状況がストアド開発には多すぎるからなぁ
つまり複雑度はなぜ行が多いのか次第

131
NAME IS NULL[]   投稿日:2016/11/25 21:23:23  ID:riZyA4Jk.net
>121
カラム数が多くて、改行してたらあっという間。
コメント1件

132
NAME IS NULL[sage]   投稿日:2016/11/25 22:45:32  ID:???.net(144)
>131
> カラム数が多くて
それはそれでどうかと思うが...

133
NAME IS NULL[sage]   投稿日:2016/11/28 10:24:40  ID:???.net(144)
データ抽出用のビュー作るとカラム数数百とかなる

134
NAME IS NULL[sage]   投稿日:2016/11/28 11:06:13  ID:???.net(144)
二つのテーブルをjoinし、マスターをそれぞれ5個joinすると、
select t1.hoge, -- t1のデータで10行
...
t2.fuga, -- t2のデータで10行
join hoge_master -- マスター系テーブルのjoinで3行
on ...
and ...
これだけで、10 + 10 + 3 * 5 * 2 = 50行
それにwhere句とsub queryがつき、さらにunionで3ブロックほど結合すれば簡単に200行とかいく。
コメント1件

135
NAME IS NULL[]   投稿日:2016/11/28 19:58:42  ID:3f+IloFY.net
カラム数はシステムが古かったり、考え方が古いひとが作ったものをだったりするとコントロールできない。

136
NAME IS NULL[sage]   投稿日:2016/11/28 20:54:44  ID:???.net(144)
何か列と行がグチャグチャ

137
NAME IS NULL[sage]   投稿日:2016/11/28 21:16:32  ID:???.net(144)
わざわざ1カラム1行でクエリ書いて行数多くてメンテナンス性落ちるなら本末転倒
コメント2件

138
NAME IS NULL[]   投稿日:2016/11/28 22:25:17  ID:PzYguHzt.net
>137
はあ?

139
NAME IS NULL[sage]   投稿日:2016/11/29 10:41:34  ID:???.net(144)
>137
>134みたいなケースで言うと、行数が多くてメンテナンス性が落ちるということはない。
逆に、1行に複数カラムを羅列される方がメンテナンス性が落ちる。

140
NAME IS NULL[sage]   投稿日:2016/11/29 12:22:04  ID:???.net(144)
お前らの言うメンテナンス性ってテキストの編集しやすさの事だったんかw
コメント1件

141
NAME IS NULL[]   投稿日:2016/11/29 12:34:20  ID:W7hPtk8B.net(2)
>140
保守、仕様変更でSQLの構文が書き直されるようなのは馬鹿のやることだろ。

リスク高すぎ。
コメント1件

142
NAME IS NULL[sage]   投稿日:2016/11/29 12:41:50  ID:???.net(144)
可読性が低くてメンテナンス性は高いという状況が思いつかない

143
NAME IS NULL[sage]   投稿日:2016/11/29 13:04:43  ID:???.net(144)
>141
>保守、仕様変更で

手を入れないといけないときは
なるべくSQL(ストアド)の変更だけで留めようと努力するけど違うのか
コメント2件

144
NAME IS NULL[]   投稿日:2016/11/29 13:17:16  ID:W7hPtk8B.net(2)
>143
ストアドだって同じだろw

145
NAME IS NULL[sage]   投稿日:2016/11/29 13:44:04  ID:???.net(144)
>143
> なるべくSQL(ストアド)の変更だけで留めようと努力するけど違うのか
QiitaをkickされたSQLおじさん信者か何かか?
コメント1件

146
NAME IS NULL[sage]   投稿日:2016/11/29 21:15:59  ID:???.net(144)
>145
SQLおじさんってどなた?
ORMおじさんは知ってたけど
コメント1件

147
NAME IS NULL[sage]   投稿日:2016/11/30 10:30:54  ID:???.net(144)
>146
SQLおじさん、Qiitaに炎上記事投稿 周囲の反応と垢BANまでの流れ
http://togetter.com/li/1047474
コメント1件

148
NAME IS NULL[sage]   投稿日:2016/11/30 11:36:29  ID:???.net(144)
>147
ありがとう、同一人物だった

149
NAME IS NULL[sage]   投稿日:2016/12/14 16:14:32  ID:???.net(144)
TBS

150
NAME IS NULL[]   投稿日:2016/12/17 00:34:45  ID:L7Q4LZyG.net(2)
教えてください
アクセスを使ってます

INSERT INTO 日時(日付,時刻)
SELECT 日付,時刻 FROM 日付,時刻
WHERE (日付,時刻) NOT IN(SELECT 日付,時刻 FROM 日時)

データをクロス結合して重複分を排除しつつ日時テーブルに書込みをしたいのですが、
上のSQLではエラーとなってしまいます
自分でも調べてはいるのですがどうにも分からず頼らせてもらえればと思います
よろしくお願いします

151
NAME IS NULL[]   投稿日:2016/12/17 01:19:14  ID:L7Q4LZyG.net(2)
150です

自己解決しました。失礼しました。

152
NAME IS NULL[sage]   投稿日:2016/12/23 14:37:04  ID:???.net(144)
それクロス集計じゃなくてただの直積じゃないのか…?

153
NAME IS NULL[sage]   投稿日:2016/12/24 04:08:40  ID:???.net(144)
クロス結合とクロス集計って違うよ

154
NAME IS NULL[sage]   投稿日:2016/12/26 23:30:53  ID:???.net(144)
すみません、教えていただけますでしょうか。
ACCESSなのですが、

【テーブルA】
ID、商品名
10.90.10、鉛筆赤
10.90.20、鉛筆青
20.800.101、はさみ青
20.800.102、はさみ緑
305.001、のり青
305.005.100、のり黒


【テーブルB】
ID、値段
10.90、100円
20.800、200円
305、500円


というテーブルがあったとします。
テーブルBのIDを取得し、テーブルAから、テーブルBのIDの文字列にて始まるIDを取得し、テーブルAに値段列を付加するSQLを
作成しようとしているのですが、作成方法がいまいちわかりません。

例えば、
【抽出したい結果】
ID、商品名、テーブルBの値段
10.90.10、鉛筆赤、100円
10.90.20、鉛筆青、100円
20.800.101、はさみ青、200円
20.800.102、はさみ緑、200円
305.001、のり青、500円
305.005.100、のり黒、500円
のような感じです。

おそらく、テーブルAとテーブルBをleft joinする形になると思うのですが、
よい方法があれば教えていただけないでしょうか。
コメント1件

155
NAME IS NULL[sage]   投稿日:2016/12/27 02:49:52  ID:???.net(144)
>154
もしかして"10.90.10"で一つの項目に入っていて
そのうちの"10.90"と突き合わせたいとかいう話?

leftとmid組み合わせるとかinstr使うとかlike使うとか、いくつかやり方は思いつくけど
悪いことは言わないからまずDB設計見直せ
コメント1件

156
NAME IS NULL[sage]   投稿日:2016/12/27 07:38:43  ID:???.net(144)
>155 早速のレス、ありがとうございます。

>>もしかして

157
NAME IS NULL[sage]   投稿日:2016/12/27 07:39:20  ID:???.net(144)
すみません、なぜか切れてしまいました。

>>もしかして"10.90.10"で一つの項目に入っていてそのうちの"10.90"と突き合わせたいとかいう話?
はい、そういうことをやりたいと考えています。IDの例があまりよくなかったので、サンプルを変更します。

【テーブルA】
ID、商品名
abc-10、鉛筆赤
abc-20、鉛筆青
ef-101、はさみ青
ef-102、はさみ緑
abdzz-001、のり青
abdzz-100、のり黒

【テーブルB】
ID、値段
abc、100円
ef、200円
abdzz、500円

【抽出したい結果】
ID、商品名、テーブルBの値段
abc-10、鉛筆赤、100円
abc-20、鉛筆青、100円
ef-101、はさみ青、200円
ef-102、はさみ緑、200円
abdzz-001、のり青、500円
abdzz-100、のり黒、500円
のような感じです。

データベース設計を見直したいのですが、もうシステムが動いてしまっていて、
変更がちょっと難しい状態なのです、、、
社内用のシステムでお客様で使っているものではないのが救いなのですが。
コメント2件

158
NAME IS NULL[sage]   投稿日:2016/12/27 10:42:43  ID:???.net(144)
テーブルAに一列追加して
B用のキーを追加した方がいいぞ
キー列が変わることなんざ無いだろうし、insertするとこだけ弄ればいい
既にある列も30分もありゃ出きるやろ
そしたら普通にインナージョインで処理できる
コメント1件

159
NAME IS NULL[sage]   投稿日:2016/12/27 11:54:27  ID:???.net(144)
>158
それselect * してるやつがいたらこける可能性ある
コメント1件

160
NAME IS NULL[sage]   投稿日:2016/12/27 12:00:38  ID:???.net(144)
>社内用のシステムでお客様で使っているものではないのが救い

社内システムには直すお金がかけられないとかあるあるだけど
それ救いじゃなくて呪い(負債)だからな

161
NAME IS NULL[sage]   投稿日:2016/12/27 12:16:08  ID:???.net(144)
>159
Accessの場合大分こけないはず
フォームとかではいちいちフィールド名指定するし
Select * のフィールド数不一致でエラー吐くパターンがむしろ想像できん

ソースは小規模Accessをフィールド建て増ししまくって用途10倍以上に増やした俺

まぁ、
A inner join B On A.ID like B.ID & '*'
でも動くだろうけど、ミスによるバグがクッソ増えそうだし嫌だわ

162
NAME IS NULL[sage]   投稿日:2016/12/27 14:28:17  ID:???.net(144)
わざわざ abczz じゃなく abdzz にしてる意図が気になるな
コメント1件

163
NAME IS NULL[sage]   投稿日:2016/12/27 15:14:12  ID:???.net(144)
>162
likeしたときに
abc-とabcde-だと被るからじゃない?

164
NAME IS NULL[sage]   投稿日:2016/12/27 16:49:49  ID:???.net(144)
苦しすぎるw

165
NAME IS NULL[sage]   投稿日:2016/12/27 17:12:37  ID:???.net(144)
>157
> データベース設計を見直したいのですが、もうシステムが動いてしまっていて、
> 変更がちょっと難しい状態なのです、、、

正しいデータベース設計後、古いテーブルと同じ形式のViewを作ることができれば、
現行システムに影響を与えることなくデータベースの変更が可能。
コメント4件

166
NAME IS NULL[sage]   投稿日:2016/12/27 19:31:30  ID:???.net(144)
>165
view賛成
ま、弊社の場合はviewだらけで訳が分からなくなってるけどね(笑

167
NAME IS NULL[sage]   投稿日:2016/12/27 21:09:16  ID:???.net(144)
>165
ソレダ

168
NAME IS NULL[sage]   投稿日:2016/12/27 21:13:35  ID:???.net(144)
>157
クエリ追加したいってことは、少なくとも何らかの変更/追加があるわけで
そのうえでそのテーブルレイアウトで自分でクエリ書けないんだろ
だったらテーブルレイアウト直すべきだと思うけどね
ま、動いてて変えられんとかいう状況ならそのシステムに似たような事してるとこあるだろ

>165-166
普通のDBMSならビューで逃げる手はあるけど、ACCESSって結構テーブルとクエリで扱い方に差があるからなぁ

169
NAME IS NULL[sage]   投稿日:2016/12/28 06:24:05  ID:???.net(144)
>165
accessで困ってる初心者に追加可能な選択クエリとか書けるかっていう疑問はあるけど出来たらそれで良いかもね

170
NAME IS NULL[sage]   投稿日:2016/12/29 07:14:51  ID:???.net(144)
viewじゃ更新できないカラムのsqlあったらどうすんの

171
NAME IS NULL[sage]   投稿日:2017/01/04 10:49:09  ID:???.net(144)
トリガー作るしか無いかなあ

172
NAME IS NULL[sage]   投稿日:2017/01/29 14:56:15  ID:???.net(144)
oracleのmergeについて質問です。
oracleは11gを使っています。


とあるテーブルにmergeを使ってpkのレコードが無ければレコード追加、レコードがあれば何もしないというsqlがありました。

このようなsqlで行が無い場合はinsertと同じようにロックを取得すると思うのですが、
既に行がある場合ってロックは取得されるのでしょうか?

リファレンスを見ると細かいケースに言及せず、mergeの表ロックモードはsxとあるので、更新処理の有無に関わらずforupdateと同様にロックされるのかなぁと思っているのですが、、

173
NAME IS NULL[sage]   投稿日:2017/03/14 22:41:55  ID:???.net(144)
【質問テンプレ】
・DBMS名とバージョン
Access?(Excel2013のデータ接続機能のところに書いて使いたいです)

・テーブルデータ
ID |Price|Name
-----------------
1001 100 ガム
1002 200 あめ
1002 300 チョコ
1003 400 クッキー
1003 500 ポテチ
1003 600 ポテチ

・欲しい結果
ID |Price|Name
-----------------
1001 100 ガム
1002 500 あめ,チョコ
1003 1500 クッキー,ポテチ,ポテチ

・説明
ID毎にPriceを合計してNameの値を結合したいです。
よろしくお願いします。

174
NAME IS NULL[sage]   投稿日:2017/03/15 00:45:52  ID:???.net(144)
主キーも何も無いのこれw
コメント1件

175
NAME IS NULL[sage]   投稿日:2017/03/15 14:25:20  ID:???.net(144)
Nameの結合の順番は決まってんの?

176
NAME IS NULL[sage]   投稿日:2017/03/15 18:49:35  ID:???.net(144)
group_concat()があれば簡単なのに

Access用にはDJoinという関数を作って公開してる人がいたみたいだけど
ページが消えてる

177
NAME IS NULL[sage]   投稿日:2017/03/15 20:10:02  ID:???.net(144)
AccessならVBAでID受け取ってNameをカンマ連結した文字列返す関数作ればできんじゃね

178
173[sage]   投稿日:2017/03/17 23:41:34  ID:???.net(144)
>174-177
返信おそくなってすみません
質問に不足してた部分があったので
また質問しなおしたいと思います

どうもありがとうございました

179
NAME IS NULL[sage]   投稿日:2017/04/26 20:40:34  ID:???.net(144)
・Postgresql 8.4

・テーブルデータ
|year|month
-----------------
2017 4
2017 6
2018 3
2018 4

・欲しい結果
|year|month
-----------------
2017 4
2017 6
2018 3

・説明
integerの列year、monthに年、月が書かれており、2017年4月〜2018年3月までの会計年度の行を取りたいのですが、そのようなことは可能でしょうか お願いします
コメント1件

180
NAME IS NULL[sage]   投稿日:2017/04/26 21:37:32  ID:???.net(144)
select * from table where year*100+month between 201704 and 201803;

じゃだめか?

181
NAME IS NULL[]   投稿日:2017/04/26 21:56:03  ID:yyy4jyWJ.net
俺じゃダメか?

182
NAME IS NULL[sage]   投稿日:2017/04/26 22:08:23  ID:???.net(144)
(year=2017 and month>=4) or (year=2018 and month<=3)でいいだろ
コメント1件

183
NAME IS NULL[sage]   投稿日:2017/04/26 22:54:12  ID:???.net(144)
IIf(Month<4,Year-1,Year) AS 会計年度
見たいなカラム持ったクエリ定義しとけよ

184
183[sage]   投稿日:2017/04/26 22:57:19  ID:???.net(144)
あ、なぜかACCESSだと思ってたw
標準的なSQLならCASEでビューか

まあ、わかるだろ

185
NAME IS NULL[sage]   投稿日:2017/04/27 04:56:49  ID:???.net(144)
>179
性能は知らん
where make_date(year, month, 1) between '2017-04-01' and '2018-03-31'

186
NAME IS NULL[sage]   投稿日:2017/04/27 07:07:55  ID:???.net(144)
>182
自分もこれだな
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

データベース板 タイトル検索

このスレッドが人気です(実況系)
実況 ◆ テレビ朝日 47666 百獣の王・依田ーザン (397)テレ朝実況
実況 ◆ フジテレビ 83214 (634)フジ実況
はやドキ! → あさチャン! (1001)TBS実況
実況 ◆ 日本テレビ 55002 (364)NTV実況
はやドキ! → あさチャン!★2 (78)TBS実況
水曜日のタウンタウンSP★18 (986)TBS実況
NHK総合を常に実況し続けるスレ 133260 求人倍率 (995)NHK実況
チカラウタ人生を変えた曲を語る音楽座談会!★2 (686)NTV実況
このスレッドが人気です(ニュース系)
【震災】「東北で良かった」…東京の皆さんの本音ではありませんか?★3 (1001)ニュー速+
【国際】米空母カール・ビンソン、北朝鮮への軍事作戦可能な海域に ★4 (656)ニュー速+
【国際】米空母カール・ビンソン、北朝鮮への軍事作戦可能な海域に ★3 (1000)ニュー速+
【対北朝鮮】経済制裁と外交手段で圧力をかける方針、平和的非核化目指す―米長官 (537)ニュー速+
【ニュース解説】そもそも天下りは何が問題なのだろうか? (267)ニュー速+
【サッカー】ドルトムント、宿敵バイエルンに逆転勝ちで決勝へ!香川は出番なし/DFBポカール準決勝 (68)音楽・芸能ニュース
【経済】ヤマト運輸、採算割れの一部通販との契約打ち切りへ (843)ニュー速+
【国際】米空母カール・ビンソン、北朝鮮への軍事作戦可能な海域に ★2 (1000)ニュー速+
データベース板の人気スレ
Oracle 質問総合スレ12 (682)
SQL初心者質問スレ (562)
DB設計を語るスレ 9 (966)
MySQL 総合 Part24 (1010)
Oracle 質問総合スレ9 (986)
不正アクセス犯がいます、警察に通報してください! (153)
Microsoft SQL Server 総合スレ 11 (377)
SQL質疑応答スレ 17問目 (185)
♪つっかもうぜ!DB! (53)
SQL質疑応答スレ 15問目 (1013)
Oracle 質問総合スレ10 (1014)
不正アクセス犯がいます!警察に通報してください! (100)
MySQL 総合 Part25 (857)
PostgreSQL Part.11 (209)
[test] 書き込みテスト 専用スレッド [テスト] (368)
Oracleの30日間トライアル版について (157)
データベース技術を勉強したいのですが… (132)
Firebird関連スレ3 (669)
性別フィールドをSEXと定義するのやめて! (105)
MariaDB (142)
SQLite Part.10 (599)
だれかみずほ銀行のDBを直してやれよ (54)
【Java】H2 Database Engine【GCJ】 (207)
(^^)BTRIEVE(^^) (126)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
広告


首都圏の方、ソフトバンク光オススメですよ


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 正常取得 - 10件 - 取得完了