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

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

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

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

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


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

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

4
NAME IS NULL[sage]   投稿日:2016/07/10 22:30:52  ID:???.net(463)
よくある質問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(463)
よくある質問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(463)
よくある質問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(463)
よくある質問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(463)
ううむ、ブロックされてしまいました。どうしたらいいだろう。

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(463)
SQLソースの部分は外しておきます。

よくある質問5

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

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

   20100601
   20100602
    ・
    ・
    ・
   20100630

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

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

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

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


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

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

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

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

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

16
NAME IS NULL[sage]   投稿日:2016/07/15 11:41:49  ID:???.net(463)
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(463)
金もらって引き受けるほどの仕事じゃないようだし
そういう手間かけるくらいなら、ご自身で治した方が良いのでは?

18
NAME IS NULL[sage]   投稿日:2016/07/15 14:14:56  ID:???.net(463)
> 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(463)
要件を教えて欲しいのだが。何を直せばいいいんだ?

20
NAME IS NULL[sage]   投稿日:2016/07/15 15:30:39  ID:???.net(463)
>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(463)
同感

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

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

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

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

25
NAME IS NULL[sage]   投稿日:2016/07/15 17:22:52  ID:???.net(463)
>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(463)
僕のために争ってくれてありがとう。
依頼する人は見つけたから大丈夫だよー
これで単位も一安心

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(463)
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(463)
質問がいまいち理解できん
そもそも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(463)
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(463)
とりあえず書き込む前に書こうまず読み直してとりあえず書こう

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

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(463)

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(463)
ジョインしたかどうかとソートの速度に関係はない
ソートのキーとなる列にインデックスを張っておけばソートが不要になる場合がある
ソートキーが複数のテーブルに跨るとすると話は面倒臭い
VIEWにインデックスを張れるDBMSならそれで解決するのも手
コメント1件

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

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(463)
GROUP BYもあるならmaterialized viewにしてインデックス張るしかないかな
メモリをひたすら積んでメモリソートでごり押しという手もあるが

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

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

58
NAME IS NULL[sage]   投稿日:2016/07/27 23:27:08  ID:???.net(463)
【質問テンプレ】
・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(463)
うちのダイニングのテーブルの配置はどう言ったらいいでしょうか

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

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(463)
それだと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(463)
>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(463)
ない項目ってどういう意味だ?
インデックスは項目(の組み合わせ)に対して作るものだぞ

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

68
NAME IS NULL[sage]   投稿日:2016/07/31 09:46:00  ID:???.net(463)
>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(463)
ちなみに>67はおかしいですか?
先生にしらせるときと生徒に知らせる時でER図を書きなさいって問題なんですが

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

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

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

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

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

74
NAME IS NULL[sage]   投稿日:2016/08/08 22:56:12  ID:???.net(463)
・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(463)
名前テーブルも作ってそれと外部結合すりゃいいじゃん。
コメント1件


76
NAME IS NULL[sage]   投稿日:2016/08/09 00:00:01  ID:???.net(463)
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(463)
表示をその順序にしたいと言うなら、
その順序指定になるカラムを追加したら?
コメント1件

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

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

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

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

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

82
74[sage]   投稿日:2016/08/09 23:16:58  ID:???.net(463)
>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(463)
>83
お名前.com sdサーバー データベース バックアップ
でググったらすぐに見つかったが?

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

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

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

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

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

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

複数joinすれば?

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

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

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

92
NAME IS NULL[sage]   投稿日:2016/09/24 21:21:17  ID:???.net(463)
いや、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(463)
従業員に付与される会社情報の多さが気になるなら2回でいいんじゃね
というか自分も2回だね

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

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

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

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

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

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

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

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

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

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(463)
普通付かないだろ
元の値は文字列なのか?
コメント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(463)
>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(463)
アドバイスをいただきたく
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(463)
というか、ふつうにhoge=trim(hoge)で良い気がするんだが
なんで自己結合する必要があるんだ

112
NAME IS NULL[sage]   投稿日:2016/11/21 11:19:03  ID:???.net(463)
それか元のテーブルを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(463)
>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(463)
>114
できました!ありがとうございます!
date_format関数について勉強しておきます

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

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

118
NAME IS NULL[sage]   投稿日:2016/11/22 18:28:47  ID:???.net(463)
短いやつをちょっとずつ書けば慣れるけど
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(463)
>117
入門書を二冊も読んだら上級者でしょ?
それもかなり上のクラスの
コメント1件

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

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

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

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

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

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

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

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

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

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

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(463)
>131
> カラム数が多くて
それはそれでどうかと思うが...

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

134
NAME IS NULL[sage]   投稿日:2016/11/28 11:06:13  ID:???.net(463)
二つのテーブルを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(463)
何か列と行がグチャグチャ

137
NAME IS NULL[sage]   投稿日:2016/11/28 21:16:32  ID:???.net(463)
わざわざ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(463)
>137
>134みたいなケースで言うと、行数が多くてメンテナンス性が落ちるということはない。
逆に、1行に複数カラムを羅列される方がメンテナンス性が落ちる。

140
NAME IS NULL[sage]   投稿日:2016/11/29 12:22:04  ID:???.net(463)
お前らの言うメンテナンス性ってテキストの編集しやすさの事だったんか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(463)
可読性が低くてメンテナンス性は高いという状況が思いつかない

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

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

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

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

149
NAME IS NULL[sage]   投稿日:2016/12/14 16:14:32  ID:???.net(463)
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(463)
それクロス集計じゃなくてただの直積じゃないのか…?

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

154
NAME IS NULL[sage]   投稿日:2016/12/26 23:30:53  ID:???.net(463)
すみません、教えていただけますでしょうか。
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(463)
>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(463)
>155 早速のレス、ありがとうございます。

>>もしかして

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

>>もしかして"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(463)
テーブルAに一列追加して
B用のキーを追加した方がいいぞ
キー列が変わることなんざ無いだろうし、insertするとこだけ弄ればいい
既にある列も30分もありゃ出きるやろ
そしたら普通にインナージョインで処理できる
コメント1件

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

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

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

161
NAME IS NULL[sage]   投稿日:2016/12/27 12:16:08  ID:???.net(463)
>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(463)
わざわざ abczz じゃなく abdzz にしてる意図が気になるな
コメント1件

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

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

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

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

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

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

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

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

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

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

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

172
NAME IS NULL[sage]   投稿日:2017/01/29 14:56:15  ID:???.net(463)
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(463)
【質問テンプレ】
・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(463)
主キーも何も無いのこれw
コメント1件

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

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

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

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

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

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

179
NAME IS NULL[sage]   投稿日:2017/04/26 20:40:34  ID:???.net(463)
・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月までの会計年度の行を取りたいのですが、そのようなことは可能でしょうか お願いします
コメント3件

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

じゃだめか?
コメント7件

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(463)
(year=2017 and month>=4) or (year=2018 and month<=3)でいいだろ
コメント10件

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

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

まあ、わかるだろ

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

186
NAME IS NULL[sage]   投稿日:2017/04/27 07:07:55  ID:???.net(463)
>182
自分もこれだな

187
NAME IS NULL[sage]   投稿日:2017/04/27 09:29:25  ID:???.net(463)
日付を分割してintに入れる糞実装、未だに存在するのかよ

188
NAME IS NULL[sage]   投稿日:2017/04/27 10:38:00  ID:???.net(463)
日付じゃなくて必要なのが月までだからだろ
コメント1件

189
NAME IS NULL[sage]   投稿日:2017/04/27 10:55:10  ID:???.net(463)
それでも /01 にしてdate型に突っ込むわ

190
NAME IS NULL[sage]   投稿日:2017/04/27 12:24:41  ID:???.net(463)
どうでもいいけど言うならせめて糞設計だよね
実装てw

191
sage[]   投稿日:2017/04/27 15:25:55  ID:JuRKhktP.net
設計:年・月を保存する
実装:年・月を別カラムにする

192
NAME IS NULL[sage]   投稿日:2017/04/27 15:38:14  ID:???.net(463)
質問者への回答と、設計の改善提案は別だろうに

193
NAME IS NULL[sage]   投稿日:2017/04/27 16:00:01  ID:???.net(463)
number(8)に日付いれるのが好きなフレンズもいるな
コメント1件

194
NAME IS NULL[sage]   投稿日:2017/04/27 16:08:50  ID:???.net(463)
>193
難点は経過日数計算が大変な

195
NAME IS NULL[sage]   投稿日:2017/04/27 17:08:47  ID:???.net(463)
俺は >180 支持だなぁ
速度的にも見た目的にも

196
NAME IS NULL[sage]   投稿日:2017/04/27 18:52:05  ID:???.net(463)
>180
会計年度中も指定できるので非常に参考になりました

他の方法も含めご教示ありがとうございます

197
NAME IS NULL[sage]   投稿日:2017/04/27 18:59:16  ID:???.net(463)
年月を保持する要件で、データに意味を持たない日の情報が含まれるって、良いのでしょうか

バグを産む可能性を秘めてるような
コメント1件

198
NAME IS NULL[sage]   投稿日:2017/04/27 19:31:38  ID:???.net(463)
>197
あり得ない月とかを突っ込める方が恐いわ
コメント1件

199
NAME IS NULL[]   投稿日:2017/04/27 19:39:19  ID:QZ3/RiVo.net
>198
そんなもんなんぼでもあるわwお前ビビりすぎw
コメント1件

200
NAME IS NULL[sage]   投稿日:2017/04/27 19:54:14  ID:???.net(463)
バカが現れた

201
NAME IS NULL[sage]   投稿日:2017/04/27 20:18:45  ID:???.net(463)
>199のレスの意味がわからなすぎる

202
NAME IS NULL[sage]   投稿日:2017/04/27 20:19:31  ID:???.net(463)
バグというより、データベースに事実にない情報を含めるとか違和感が

203
NAME IS NULL[sage]   投稿日:2017/04/27 20:44:47  ID:???.net(463)
numberでもバグを産む可能性を秘めてるし
どっちのリスクをとるかだけじゃね

204
NAME IS NULL[sage]   投稿日:2017/04/27 21:33:38  ID:???.net(463)
年月のみを管理したいっていう場合に
・日付としての正当性は保証されるけど不要な日の情報を持つ
・日付としての正当性は保証されないけど不要な情報を持たない
のどちらがいいか?
って話でしょ
個人的にはデータの正当性の方を重視するかな

205
NAME IS NULL[sage]   投稿日:2017/04/28 07:06:33  ID:???.net(463)
そして2017/4/1と2017/4/2など
同一年月で複数レコードできてしまうのでした
コメント1件

206
NAME IS NULL[sage]   投稿日:2017/04/28 07:18:39  ID:???.net(463)
年月情報をユニーク制約を保持する仕様で日付計算のためにdate使ってたら、皆さんはどう思いますか

207
NAME IS NULL[sage]   投稿日:2017/04/28 10:47:01  ID:???.net(463)
もうUNIQUE制約のある年月列と日付計算用の列を分けろよ

208
NAME IS NULL[sage]   投稿日:2017/04/28 11:33:54  ID:???.net(463)
レコードの入力時に日付が何入っていようと、1にしてしまえば良いだけだろう

209
NAME IS NULL[sage]   投稿日:2017/04/28 12:16:53  ID:???.net(463)
そんなもん制約がなければ全く信用できん
本当に頭が悪いなお前ら

210
NAME IS NULL[sage]   投稿日:2017/04/28 13:33:21  ID:???.net(463)
>205
2017/00 とか 2017/13 とか入ってるのとどっちがいい?

211
NAME IS NULL[sage]   投稿日:2017/04/28 15:57:28  ID:???.net(463)
DB側の制約がいかに利用されていないか分かるな

212
NAME IS NULL[sage]   投稿日:2017/04/28 18:48:18  ID:???.net(463)
1日の0時になっているか確認するcheck制約つければいい

213
NAME IS NULL[sage]   投稿日:2017/04/28 20:51:04  ID:???.net(463)
そもそもカラムが年と月別なんだからcheck制約でもMonth>=1 and Month<=12でいいから簡単だろ
プログラムも同様
まさか日付を変換して1日かとかやるとか?
いらない情報付与からして、そんなのうちでは許されないわw

214
NAME IS NULL[sage]   投稿日:2017/04/30 03:36:41  ID:???.net(463)
>182
後の人間を苦しめるコードをまき散らすのは止めよう
コメント1件

215
NAME IS NULL[]   投稿日:2017/04/30 19:54:54  ID:PSrTmapn.net
>214
馬鹿の苦しみなんか気にしてられんわw

216
NAME IS NULL[sage]   投稿日:2017/04/30 20:56:47  ID:???.net(463)
3年分取ってきてと言われて初めて問題に気付くパターンや

217
NAME IS NULL[sage]   投稿日:2017/04/30 23:19:56  ID:???.net(463)
where fiscal_year(year, month) = 2017
みたいな感じで関数使うかビュー使うほうがロジックが一箇所に集まっていい気がする
パフォーマンス気にするレベルならcalender yearとは別にfiscal yearをデータに持たせるかな
コメント3件

218
NAME IS NULL[sage]   投稿日:2017/04/30 23:33:29  ID:???.net(463)
あと fiscal_year(date) みたいにオーバーロードしとけば
インターフェースが統一されて使いやすい

219
NAME IS NULL[sage]   投稿日:2017/05/01 09:41:38  ID:???.net(463)
SQLにオーバーロードあるんですか?どんなRDB?

220
NAME IS NULL[sage]   投稿日:2017/05/01 10:54:41  ID:???.net(463)
え、、、普通にあるでしょ
むしろできないDBってどれよ
コメント1件

221
NAME IS NULL[sage]   投稿日:2017/05/01 13:48:49  ID:???.net(463)
>220
できないやつ多数でしょ

222
NAME IS NULL[sage]   投稿日:2017/05/01 14:14:22  ID:???.net(463)
そうなんか、OracleとPostgreSQLで出来てるから普通なのかと・・・

223
NAME IS NULL[sage]   投稿日:2017/05/01 14:29:03  ID:???.net(463)
まーた、俺様の「普通」が炸裂しとる

224
NAME IS NULL[sage]   投稿日:2017/05/01 14:33:46  ID:???.net(463)
Oracleは特例
いいね?

225
NAME IS NULL[sage]   投稿日:2017/05/01 15:03:51  ID:???.net(463)
てか、そもそもOracleでも単純なオーバーロードってあったっけ?

226
NAME IS NULL[sage]   投稿日:2017/05/01 15:05:03  ID:???.net(463)
packageを使ったオーバーロードはあるが・・・
http://www.shift-the-oracle.com/plsql/overloading-subprogram-name.html

227
NAME IS NULL[sage]   投稿日:2017/05/01 15:07:37  ID:???.net(463)
このケースはComputed Columnが使えればそれがいいと思うけど
Postgresでは使えないから関数オーバーロードしとくって話
Computed Columnなら使えるDB多いだろ

SQL標準ならView使えって話かもしれんがViewは管理上のオーバーヘッドが高くなる傾向があるから
使わなくてすむケースならなるべく使わないようにしてる

228
NAME IS NULL[sage]   投稿日:2017/05/01 15:15:27  ID:???.net(463)
普通に>182でいいだろ
コメント1件

229
NAME IS NULL[sage]   投稿日:2017/05/01 15:36:01  ID:???.net(463)
PostgreSQL有害論

230
NAME IS NULL[sage]   投稿日:2017/05/01 16:10:53  ID:???.net(463)
>228
会計年度を必要とするたびに繰り返し同じことをするのでよければね
年度別に集計したい場合とかしんどいし俺はごめんだわ
コメント1件

231
NAME IS NULL[sage]   投稿日:2017/05/01 16:49:59  ID:???.net(463)
普通に関数でいいと思うんだが、あえて(関数?)オーバーロードって言ってるのはなんで?
コメント1件

232
NAME IS NULL[sage]   投稿日:2017/05/01 16:57:59  ID:???.net(463)
>230
そういうこと言ってるからいつまでたってもスキルが向上しないんだよ
select case when month < 4 then year - 1 else year end as fiscal_year, sum(hoge)
from foo
group by case when month < 4 then year - 1 else year end
コメント7件

233
NAME IS NULL[sage]   投稿日:2017/05/01 17:06:24  ID:???.net(463)
つか、いたるところで会計年度を意識するようなシステムなら、会計年度カラムを作っとけばいいよな
コメント1件

234
NAME IS NULL[sage]   投稿日:2017/05/01 18:03:32  ID:???.net(463)
>232
where句も入れて何回繰り返すのさ
面倒くさいとは思わないの?
単発の作業ならわからんでもないが会計年度みたいなのは1回じゃすまないだろ

>231
日付型でデータを持ったテーブルがあったり
日付型に徐々に移行したい場合に同じ名前で扱えるとうれしいから
会計年度って概念をDBに反映させる一つの手段
コメント3件

235
NAME IS NULL[sage]   投稿日:2017/05/01 18:18:52  ID:???.net(463)
>234
> 面倒くさいとは思わないの?
いや、まったく
>232レベルのクエリなら10秒もかからずタイプできるだろ
コメント1件

236
NAME IS NULL[sage]   投稿日:2017/05/01 18:28:00  ID:???.net(463)
>234
> where句も入れて何回繰り返すのさ
ストアドでも似たようなもんだろ。
select fiscal_year(year, month), sum(hoge) from fuga group by fiscal_year(year, month)
しかもストアド使うと、year, monthにインデックスあっても使われないし。
コメント1件

237
NAME IS NULL[sage]   投稿日:2017/05/01 18:37:19  ID:???.net(463)
ストアド最強!!!|バカの壁| SQL92以降

238
NAME IS NULL[sage]   投稿日:2017/05/01 18:46:32  ID:???.net(463)
kantomi@qiita_banned < ストアド!ストアド!

239
NAME IS NULL[sage]   投稿日:2017/05/01 18:53:59  ID:???.net(463)
>235
面倒くさいと思わないならいいんじゃね

>236
asで名前つけとけばgroup byでは繰り返す必要ないよ
たとえ繰り返しが必要だったとしても概念をその名前で直接扱える状態と
毎回展開しなきゃいけない状態では全く意味が違うんだけどね

インデックスは必要ならはればいい
コメント2件

240
NAME IS NULL[sage]   投稿日:2017/05/01 19:03:28  ID:???.net(463)
>233
算出できる情報を別途カラム作って持たせるのは最終手段
コメント1件

241
NAME IS NULL[sage]   投稿日:2017/05/01 19:04:19  ID:???.net(463)
>180 重み付けの定石
>182 単年度でしか動かないクソ
>185 意図が分かりやすい
>217 ビジネスロジックをDBMSに持たせる派とアプリに持たせる派で戦争勃発
コメント2件

242
NAME IS NULL[sage]   投稿日:2017/05/01 19:33:28  ID:???.net(463)
>241
一番馬鹿ww

243
NAME IS NULL[sage]   投稿日:2017/05/01 21:25:30  ID:???.net(463)
>234
fiscal_year(year, month)って関数自体はまだなにもオーバーロードしてないだろうが。

244
NAME IS NULL[]   投稿日:2017/05/01 21:52:46  ID:45FTV8QE.net
>241のどこが馬鹿なのか論理的に説明できないやついるの?

245
NAME IS NULL[sage]   投稿日:2017/05/01 23:12:56  ID:???.net(463)
>240
分解せずに日付型で持っていればよかったって事だな
以降>188へ戻る

246
NAME IS NULL[sage]   投稿日:2017/05/02 03:16:15  ID:???.net(463)
管理上のオーバーヘッドってのがユーザ側の話なのかシステム側の話なのかしらんが
関数オーバーロードができたとして、それがビューより管理が重いとか信じられん

会計年度が必要ならそう言うビュー作れ、で終わりじゃないのか
コメント1件

247
NAME IS NULL[sage]   投稿日:2017/05/02 08:24:38  ID:???.net(463)
一方ロシアは会計年度カラムを追加した

248
NAME IS NULL[sage]   投稿日:2017/05/02 10:00:08  ID:???.net(463)
インデックス張るなら、ロシア方式が一番いいよな
トリガーで仕掛けておけば気にしなくて済むし

249
NAME IS NULL[sage]   投稿日:2017/05/02 10:17:39  ID:???.net(463)
>239
> インデックスは必要ならはればいい
本末転倒だな
普通にクエリ書けばインデックス使えるのに、ストアドにしようと思うとさらに何かしないといけなくなる
つか、ストアドの結果にインデックス貼れないDBもあるんじゃね?

250
NAME IS NULL[sage]   投稿日:2017/05/02 10:22:47  ID:???.net(463)
>239
> asで名前つけとけばgroup byでは繰り返す必要ないよ
その手段が使えるDBでは、>232も同じことが言える

> 毎回展開しなきゃいけない状態では全く意味が違うんだけどね
例えば四半期ごとの集計がほしいとか、移動平均がほしいとかいうことになったら、
そのたびにストアド作るのか?
増殖しまくりだな
コメント1件

251
NAME IS NULL[sage]   投稿日:2017/05/02 10:26:43  ID:???.net(463)
ん? >232 だとインデックス使われないだろ
>217-218 >185 のような関数だともっと使われない
>182 のように or あると、うまく使ってくれるか怪しい
コメント2件

252
NAME IS NULL[sage]   投稿日:2017/05/02 10:38:44  ID:???.net(463)
>251
> ん? >232 だとインデックス使われないだろ
where書いてないからね
>232は、集計がしんどいという奴へのレス

>182 のように or あると、うまく使ってくれるか怪しい
大抵のRDBMSだったらうまく使ってくれるんじゃね?

253
NAME IS NULL[sage]   投稿日:2017/05/02 10:44:41  ID:???.net(463)
それより決算月が変わる可能性について考えたほうがいいと思う
コメント1件

254
NAME IS NULL[sage]   投稿日:2017/05/02 10:45:38  ID:???.net(463)
>251
> >217-218 >185 のような関数だともっと使われない
こういうバカ避けのためにわざわざ「性能は知らん」って書いてあるのにバカはそれすら理解できないんだな w
インデックス使いたいならdate型にしとけよ
コメント1件

255
NAME IS NULL[sage]   投稿日:2017/05/02 10:49:15  ID:???.net(463)
>253
会計年度カラム追加で解決。

256
NAME IS NULL[sage]   投稿日:2017/05/02 10:51:13  ID:???.net(463)
>254
year, monthにインデックス張ればいいだろ
アホか
コメント2件

257
NAME IS NULL[sage]   投稿日:2017/05/02 11:01:20  ID:???.net(463)
ビューのコストが高いというのがparserの話だとしたら、単純なビューなら最近では全く問題にならない
まぁ、大抵の場合、クエリ1回につき+1ms未満だろう。
(さらには、直近のparse結果をcacheしている場合もある)

258
NAME IS NULL[sage]   投稿日:2017/05/02 11:03:21  ID:???.net(463)
>256
> year, monthにインデックス張ればいいだろ

インデックス張っても関数の引数にしちゃったら使われない

259
NAME IS NULL[sage]   投稿日:2017/05/02 15:49:34  ID:???.net(463)
>256
バカってこれだから...
複数の列に張るより単一の方が有利だろう
そんなことも理解できないのかよ w
コメント1件

260
NAME IS NULL[sage]   投稿日:2017/05/02 16:00:26  ID:???.net(463)
そんな理由だったらオレもアンタをバカ呼ばわりしていいかな
コメント1件

261
NAME IS NULL[sage]   投稿日:2017/05/02 16:16:34  ID:???.net(463)
>260
理由が書けるならね

262
NAME IS NULL[sage]   投稿日:2017/05/02 17:11:25  ID:???.net(463)
不利っつっても、比較が1回か2回かって違いくらいしかないだろ。

263
NAME IS NULL[sage]   投稿日:2017/05/02 17:17:06  ID:???.net(463)
ここを2つに分けるかどうかの是非はともかく
キーが2つになるから絡むつにしようとかおかしいだろw

まあこのケース、月なんて12通りしか無いんだし複合キーで

264
NAME IS NULL[sage]   投稿日:2017/05/02 18:48:29  ID:???.net(463)
>複数の列に張る

こういう言い方しているところを見ると、複合インデックスの仕組みをわかってないんだろう。
コメント2件

265
NAME IS NULL[sage]   投稿日:2017/05/02 18:57:10  ID:???.net(463)
yearのインデックスとmonthのインデックスを別々に張りそう

266
NAME IS NULL[sage]   投稿日:2017/05/02 19:11:26  ID:???.net(463)
>250
>その手段が使えるDBでは、>232も同じことが言える
そんなんわざわざ言わんでもわかっとるがな〜ww

>増殖しまくりだな
増殖して何か問題あるの?

267
NAME IS NULL[sage]   投稿日:2017/05/02 21:48:44  ID:???.net(463)
>246
システム側の話
組織構造なんかも大きく影響するから環境による
導出列はビューを使うっていう規約があってそれに従ってるようなところならオーバーヘッドも少ないだろうね
ただ関数よりビューのほうが管理の厳格度というか管理レベルが高いのは一般的じゃないのかな?
管理レベルが高ければその分のオーバーヘッドはかかる

それに同じような年・月で持ってるテーブルが10個に増えたら10個ビューを追加することになる
そういうのが嫌だからComputed Column的な機能があるDBが多いと思ってる
コメント1件

268
NAME IS NULL[sage]   投稿日:2017/05/02 22:51:26  ID:???.net(463)
>264
お前こそわかってないだろ w
>180, >182 みたいに複合インデックスの各々の列を別々に大小比較で使うとインデックス使えないぞ
コメント1件

269
NAME IS NULL[sage]   投稿日:2017/05/02 23:17:09  ID:???.net(463)
使われないインデックスと、使えないお前らの脳ミソ達。

270
NAME IS NULL[sage]   投稿日:2017/05/03 00:11:51  ID:???.net(463)
>182は(orは別として)yearとmonthの複合インデックスの教科書的な例だと思うが。
つか、>180>182を同列に並べている時点でお里が知れる。
コメント2件

271
NAME IS NULL[sage]   投稿日:2017/05/03 04:36:48  ID:???.net(463)
>267
管理レベルってのがなんだかわからんが
ビューの方がより厳密に適用される分、問い合わせ時のシステム的なオーバーヘッドは小さいだろ
実行計画もより最適化できる
つか、ユーザー側/システム側って切り分けが、どっちも人員の切り分けだと思ってる?

>それに同じような年・月で持ってるテーブルが10個に増えたら
同じものが分散して存在してたら、その時点でテーブル設計が間違ってるわ

272
NAME IS NULL[sage]   投稿日:2017/05/03 07:59:56  ID:???.net(463)
馬鹿はなぜ無駄に未来の心配ばかりするのか

273
NAME IS NULL[sage]   投稿日:2017/05/03 09:25:30  ID:???.net(463)
>270
実行計画見てみ
複合インデックスの仕組み知ってたらそんなアホな発想はできないよ

274
NAME IS NULL[sage]   投稿日:2017/05/03 10:39:56  ID:???.net(463)
おまえこそ見てみろと言いたいが。

念のためだが、ヘボいオプティマイザがorのせいでスキャン範囲の限定に失敗するのは
「複合インデックスの各々の列を別々に大小比較で使うとインデックス使えない」てのとは
関係ないからな。
コメント2件

275
NAME IS NULL[sage]   投稿日:2017/05/03 11:04:58  ID:???.net(463)
>274
> orのせいで
バカを晒すのはほどほどにしろよ

276
NAME IS NULL[sage]   投稿日:2017/05/03 12:06:11  ID:???.net(463)
>274
複合インデックスから任意の1つの列を選んで使う事はできないので、 データベースはインデックスを使いません。
インデックスの構造をより深く見ていくと、この理由がはっきりします。
http://use-the-index-luke.com/ja/sql/where-clause/the-equals-operator/conca...
コメント1件


277
NAME IS NULL[sage]   投稿日:2017/05/03 12:40:47  ID:???.net(463)
今どきは>182でも(year,month)のインデックスがあれば
(そしてそれを使ったほうが速いとDBMSが判断すれば)
使うDBMSのほうが多いと思う

パフォーマンスに関しては昔の定石を今はあまり気にしなくても
良くなっていることが多いので必ず実機で試してから語ったほうがいい

278
NAME IS NULL[sage]   投稿日:2017/05/03 13:06:33  ID:???.net(463)
>276
それはyearを使わずにmonthだけだった場合だな。こんな初歩的な勘違いしてたのか。
コメント1件

279
NAME IS NULL[sage]   投稿日:2017/05/03 13:34:58  ID:???.net(463)
>278
バカはこれだから...
わざわざ
> インデックスの構造をより深く見ていくと、この理由がはっきりします。
って言うところまで引用してるだからその下読めよ
理解できるかどうかは知らんけど w

280
NAME IS NULL[sage]   投稿日:2017/05/03 14:38:41  ID:???.net(463)
アホなレス量産してるやつは約1名だけっぽいな

281
NAME IS NULL[sage]   投稿日:2017/05/03 17:44:08  ID:???.net(463)
year, monthにインデックスの件だけど、PostgreSQLなら使われるけどなぁ
ほかのDBだと使われなかったりするのか?
コメント1件

282
NAME IS NULL[sage]   投稿日:2017/05/03 17:47:31  ID:???.net(463)
create table hoge (year integer, month integer, amount integer);
create index hoge_idx on hoge(year, month);

select year, month, sum(amount)
from hoge where (year = 2017 and month > 3) or (year = 2018 and month < 4)
group by year, month;

実行計画:
https://explain.depesz.com/s/rwx
コメント5件

283
NAME IS NULL[sage]   投稿日:2017/05/03 18:26:59  ID:???.net(463)
使われないDBがあると思ってるのは約1名だけだぞ

284
NAME IS NULL[sage]   投稿日:2017/05/03 18:31:37  ID:???.net(463)
実行計画見るような人なら当然わかっているだろうけど、統計情報がとられていなかったり
選択されるレコードの割合ががテーブル全体に対して大きい場合はインデックススキャンが
選択されないから注意な。

285
NAME IS NULL[sage]   投稿日:2017/05/03 18:42:36  ID:???.net(463)
インデックス使われないマン =
オーバーロードマン =
Computed Columnマン
コメント1件

286
NAME IS NULL[sage]   投稿日:2017/05/03 18:49:07  ID:???.net(463)
=管理レベルマン

287
NAME IS NULL[sage]   投稿日:2017/05/03 19:48:53  ID:???.net(463)
>281-282
ああPostgreSQLはデータが少ない時はBit Map展開するのか
http://use-the-index-luke.com/ja/sql/explain-plan/postgresql/operations
それを一般的な話にされても困るな
コメント5件

288
NAME IS NULL[sage]   投稿日:2017/05/03 19:56:46  ID:???.net(463)
まさか今どき、インデックスがあれば必ず使うとか思ってるんだろうか
ルールベースとコストベースの違いも分かってない?
コメント3件

289
NAME IS NULL[sage]   投稿日:2017/05/03 20:03:06  ID:???.net(463)
「使われない場合もある」に方向転換w

290
NAME IS NULL[sage]   投稿日:2017/05/03 20:30:25  ID:???.net(463)
>285
おいこら
インデックス使われないマンと一緒するなよw

291
NAME IS NULL[sage]   投稿日:2017/05/03 20:42:23  ID:???.net(463)
>288
>270 辺りに言ってやれよ
コメント1件

292
NAME IS NULL[sage]   投稿日:2017/05/03 20:49:46  ID:???.net(463)
>291
インデックス使われないマンちぃーす

293
NAME IS NULL[]   投稿日:2017/05/03 21:10:30  ID:/Lg9geb/.net
お前らが馬鹿なのは使う必要のないインデックスについて延々と話してることだけどな

294
NAME IS NULL[sage]   投稿日:2017/05/03 22:00:09  ID:???.net(463)
>288
「使う場合もある」に方向転換w

295
NAME IS NULL[sage]   投稿日:2017/05/03 22:14:57  ID:???.net(463)
>282
それ >287 が書いてる通り Bit Map Index Scanだよ
URL読めばわかると思うけど

> ビットマップスキャンは、一度に全てのタプルへのポインタをインデックスから取り出し、
----
インメモリな「ビットマップ」データ構造を使ってソートし
----
> 物理的なタプル位置の順にテーブルのタプルにアクセスします。

つまりyearとmonthに対して個別にインデックス張っときゃソートなんて要らない
要するに >264-265 をディスってるだけなんだが w
コメント3件

296
NAME IS NULL[sage]   投稿日:2017/05/03 22:20:18  ID:???.net(463)
結論

>year, monthにインデックス張ればいいだろ
>アホか

297
NAME IS NULL[sage]   投稿日:2017/05/03 22:20:54  ID:???.net(463)
まあ、日付型とか言ってる奴は決算月の考慮どうするんだろうと思うわ
コメント1件

298
NAME IS NULL[sage]   投稿日:2017/05/03 22:51:38  ID:???.net(463)
またドヤ顔で恥の上塗り

299
NAME IS NULL[sage]   投稿日:2017/05/03 22:56:01  ID:???.net(463)
具体的に説明できない奴がわらわら沸いてるw

300
NAME IS NULL[sage]   投稿日:2017/05/03 23:01:34  ID:???.net(463)
>297
決算月と日付型との間に問題があるなら後学のために披露しては?
それか質問なら>1読んでからどうぞ

301
NAME IS NULL[sage]   投稿日:2017/05/04 09:47:10  ID:???.net(463)
結論だけ言ってて根拠が無ければそれはただの推論

302
NAME IS NULL[sage]   投稿日:2017/05/04 10:19:56  ID:???.net(463)
妄想の可能性も...

303
NAME IS NULL[sage]   投稿日:2017/05/04 11:07:26  ID:???.net(463)
>287
データ量が多いというのは1億レコードとかそんな単位?
>282は100万件だったけど、1000万件でも同じだよ。

>288
そういう話じゃない。
ストアド作って、where fiscal_year(year, month) = 2017とやると通常はインデックスは使われないが、
普通にクエリ書けば、適切な場面でインデックスが使われるという話だ。

> ルールベースとコストベースの違いも分かってない?
PostgreSQLの話になるが、PostgreSQLにはルールベースのオプティマイザはないよ。

>295
コメントの意図がわからないんだが。

> つまりyearとmonthに対して個別にインデックス張っときゃソートなんて要らない
それ、monthに対するインデックスの意味ないよね。
コメント1件

304
NAME IS NULL[sage]   投稿日:2017/05/04 11:16:06  ID:???.net(463)
>303
> データ量が多いというのは1億レコードとかそんな単位?
> >282は100万件だったけど、1000万件でも同じだよ。
マジで仕組みを理解してないんだな w
そっちのデータ量じゃなくてインデックスの方
要するに年と月の数の話

> それ、monthに対するインデックスの意味ないよね。
ないと本気で思ってるなら真面目にもう少し勉強した方がいいと思う
コメント1件

305
NAME IS NULL[sage]   投稿日:2017/05/04 11:33:25  ID:???.net(463)
>304
> マジで仕組みを理解してないんだな w
わかるような単語使いましょう。ちゃんと用意されてるんだから。

> 要するに年と月の数の話
カーディナリね。

> ないと本気で思ってるなら真面目にもう少し勉強した方がいいと思う
どういう意味があるんだ?
コメント1件

306
NAME IS NULL[sage]   投稿日:2017/05/04 13:11:20  ID:???.net(463)
>305
> カーディナリね。
それを言うならカーディナリティな

> わかるような単語使いましょう。
でかいブーメラン乙 w
きちんと理解せずに背伸びするからそう言う間違いをしちゃうんだよ

> どういう意味があるんだ?
普通にインデックスとして使われるだけだが?
なぜmonthは使われないと思ったんだ?
コメント1件

307
NAME IS NULL[sage]   投稿日:2017/05/04 13:46:35  ID:???.net(463)
>306
> それを言うならカーディナリティな
知ってるなら最初から使おうな。

> なぜmonthは使われないと思ったんだ?
使われないから意味ないんだよ。
まぁ、monthを軸にした検索をすれば使われるだろうが、今回の流れとは関係ないね。

俺がコメントを続けた意味が理解できてないようだから、再説明しとこう。

>295
>282
> それ >287 が書いてる通り Bit Map Index Scanだよ
> URL読めばわかると思うけど
これが意味不明なんだが。
bitmap index scanだから何?
コメント1件

308
NAME IS NULL[sage]   投稿日:2017/05/04 14:11:42  ID:???.net(463)
脇道の細かい議論しても仕方がないから、論点を絞ろう。

君が主張したいのはこれか?
>259
> 複数の列に張るより単一の方が有利だろう

それに対する俺の主張は、「year, monthに複合インデックス貼る方が有利」。
理由は、
・インデックスが全くない場合は、seq scanになり、論外
・yearのみにインデックスを張った場合、「2017年度」のデータを参照するとき、2年分のデータを読み1年分のデータを捨てる必要がある
・monthのみのインデックスには意味がない
・year, monthにインデックスを張れば、>179のような会計年度別集計などの場合にインデックスが使われる(もちろん、使った方がコスト的に有利な場合)

・(おまけ)year, monthにインデックス張っても、where fiscal_year(year, month) = 2017などとするとインデックスが使われなくなる
・(さらにおまけ)PostgreSQLには、関数インデックスという機能があり「fiscal_year(year, month)」に対してインデックスを貼ることができる
・(蛇足)そこまでするなら、普通にクエリ書け
コメント1件

309
NAME IS NULL[sage]   投稿日:2017/05/04 16:35:58  ID:???.net(463)
>307
> 知ってるなら最初から使おうな。
ちゃんとした知識持ってる奴なら >287 のリンク先読めばわかるし
それでわからんような奴にカーディナリティとか言ってもしょうがないだろ
さすがに中途半端にカーディナリとか言う知ったかさんの存在までは想定しとらん

> 使われないから意味ないんだよ。
なぜ使われないんだ?
に対して「使われないから」って日本語大丈夫か?

> まぁ、monthを軸にした検索をすれば使われるだろうが、今回の流れとは関係ないね。
>> (year=2017 and month>=4) or (year=2018 and month<=3)
で関係ないと考える奴にどう説明しろと?

> bitmap index scanだから何?
>287 のリンク先読めよ
それでもわからないと言うから >295 でも説明してる
さらにそれでもわからんと言うならわからない箇所を引用してくれ

すごく中途半端な知識で語ってるようだからどこがわからんのか予測できないし
コメント1件

310
NAME IS NULL[sage]   投稿日:2017/05/04 16:47:15  ID:???.net(463)
>308
> ・year, monthにインデックスを張れば、>179のような会計年度別集計などの場合にインデックスが使われる(もちろん、使った方がコスト的に有利な場合)
複合インデックスの話だよね?
それならBit Map Index Scanになるから実行時にインデックスデータについてソート処理が走るんだよ?
そこ理解してる?
ちなみに俺は
> インデックス使いたいならdate型にしとけよ
って言ってるから普通にIndex Scanするだけなのでソート処理なんて要らんから
コメント1件

311
NAME IS NULL[sage]   投稿日:2017/05/04 17:13:18  ID:???.net(463)
なんでBit Map Index Scanになるのが当然のような言い方なんだか。
コメント1件

312
NAME IS NULL[sage]   投稿日:2017/05/04 17:21:33  ID:???.net(463)
>311
他の方法があると言うなら示してみて

313
NAME IS NULL[sage]   投稿日:2017/05/04 17:22:38  ID:???.net(463)
そろそろ結論出して終わりにしてください
結論がまとまらないなら、両論併記で良いと思います

314
NAME IS NULL[sage]   投稿日:2017/05/04 17:28:28  ID:???.net(463)
お互い相手のことを馬鹿だと思っているなら
馬鹿相手にムキになっている自分を恥じたほうがいいと思うが
コメント1件

315
NAME IS NULL[sage]   投稿日:2017/05/04 17:48:27  ID:???.net(463)
いや既に結論出てるけど理解できない人が食い下がってるだけ

316
NAME IS NULL[sage]   投稿日:2017/05/04 18:23:25  ID:???.net(463)
>180で答え出てるから後は設計スレでしてくれ
閑古鳥鳴いてるからウェルカムだぞ
コメント1件

317
NAME IS NULL[sage]   投稿日:2017/05/05 11:22:05  ID:???.net(463)
せめて年月から会計年度を返す関数化してくれ

318
NAME IS NULL[sage]   投稿日:2017/05/09 13:37:10  ID:???.net(463)
>310
> それならBit Map Index Scanになるから実行時にインデックスデータについてソート処理が走るんだよ?
> そこ理解してる?
その「ソート処理」は、計画ノード種別の「ソート」じゃなくて、Bitmap Index Scanのアルゴリズム上、実装コードで
ソートが必要だということじゃないの?
実際、>282の実行計画には、「ソート」はないわけで。
で、アルゴリズム上、ソートが必要だとして、何か問題でも?

> > インデックス使いたいならdate型にしとけよ
> って言ってるから普通にIndex Scanするだけなのでソート処理なんて要らんから
Index Scanの場合も、aggregateするときに、実装コードでソートが必要な気がするが。
(ソートせずに何回もループしてもいいが、多分ソートするんじゃないかと思う)

319
NAME IS NULL[sage]   投稿日:2017/05/09 13:48:09  ID:???.net(463)
ケースバイケース

320
NAME IS NULL[sage]   投稿日:2017/05/09 13:48:27  ID:???.net(463)
>309
> なぜ使われないんだ?
なぜもクソも使わないんだよ。

> >> (year=2017 and month>=4) or (year=2018 and month<=3)
> で関係ないと考える奴にどう説明しろと?
関係ないね。
関係あるというなら、テストデータ作って実行計画出してみな。

> すごく中途半端な知識で語ってるようだからどこがわからんのか予測できないし
俺がお前に言いたい言葉だな。

321
NAME IS NULL[sage]   投稿日:2017/05/09 14:10:30  ID:???.net(463)
親切なので、year, monthに個別にindexを張った場合の実行計画を取ってみた。
https://explain.depesz.com/s/UapJ

書き忘れたが、
> インデックス使いたいならdate型にしとけよ
大本の話は会計年度で集計するときの話。
date型なら会計年度を取得して集計する必要があって、そこでストアドやビルトイン関数使うと
日付カラムにindexあっても使われないって話な。

さらに言えば、会計年度カラム追加しろとかいう話なら、今のままで複合インデックスつけて普通に
検索しろってこった。
(何度ループするんだよ)

322
NAME IS NULL[sage]   投稿日:2017/05/09 14:24:55  ID:???.net(463)
さらにおまけ。

# \d fuga
テーブル "public.fuga"
列 | 型 | 修飾語
--------+---------+--------
dt | date |
amount | integer |
インデックス:
"fuga_idx" btree (dt)

explain analyze verbose select sum(amount) from fuga where dt between '2013-04-01' and '2014-03-31';

実行計画:
https://explain.depesz.com/s/533s
Bitmap Index Scanになってますが。

323
NAME IS NULL[sage]   投稿日:2017/05/09 14:55:26  ID:???.net(463)
これにもレスしとこう。

前提として、seq scanではパフォーマンス的に問題があるレベルのレコード数の場合。
>316
> >180で答え出てるから後は設計スレでしてくれ

whereで式を使うと、そのカラムにインデックスがあっても使われない。
> Seq Scan on public.hoge (cost=0.00..30406.00 rows=5000 width=12) (actual time=0.028..253.216 rows=100600 loops=1)
> Output: year, month, amount
> Filter: ((((hoge.year * 100) + hoge.month) >= 201604) AND (((hoge.year * 100) + hoge.month) <= 201703))
> Rows Removed by Filter: 899400
> Execution time: 288.702 ms

なお、PostgreSQLには式インデックスという機能があって、それを作ればインデックスが使われる。
create index hoge_calc_idx on hoge((year*100+month));
> Bitmap Index Scan on hoge_calc_idx (cost=0.00..106.42 rows=5000 width=0) (actual time=13.776..13.776 rows=100600 loops=1)
> Index Cond: ((((hoge.year * 100) + hoge.month) >= 201604) AND (((hoge.year * 100) + hoge.month) <= 201703))
> Execution time: 74.346 ms
コメント1件

324
NAME IS NULL[sage]   投稿日:2017/05/09 18:45:08  ID:???.net(463)

325
NAME IS NULL[sage]   投稿日:2017/05/10 10:29:23  ID:???.net(463)
>324
まあ、微粒子レベルで俺が間違ってる可能性があるからな
コメント1件

326
NAME IS NULL[sage]   投稿日:2017/05/10 10:41:42  ID:???.net(463)
>325
お前が>323なら、おかしいのはお前の相手の方だから心配すんな
>268からずっとおかしい
相手するだけ無駄

327
NAME IS NULL[sage]   投稿日:2017/05/10 10:55:53  ID:???.net(463)
今時、コストベースがどうこうとか言う奴だからな。
10年以上前にちょろっとDB触ったレベルの奴じゃね?

328
NAME IS NULL[sage]   投稿日:2017/05/10 14:06:04  ID:???.net(463)
・ストアドにしてオーバーロードしろ
・インデックス使いたいならdate型にしろ
・date型にしないなら個別インデックスにしろ
・Bit Map Indexガー
・ソートガー

全部同じやつでしょ
最初からおかしい

329
NAME IS NULL[sage]   投稿日:2017/05/10 17:35:34  ID:???.net(463)
今更というかやっと式インデックスが出てくる脱力感
コメント1件

330
NAME IS NULL[sage]   投稿日:2017/05/10 18:21:15  ID:???.net(463)
>329
式なんか使わずに普通にクエリ書けと何度言ったら

331
NAME IS NULL[]   投稿日:2017/05/15 18:17:10  ID:/ZtiK+kF.net
Local and global coordinate system

332
NAME IS NULL[]   投稿日:2017/05/29 23:01:50  ID:OpaRYJdt.net
・Postgresql 8.4

・テーブルデータ
|col_a|col_b|col_c
-----------------
name1 1  0
name1 0  3
name2 0 2
name2 0 2
name3 0 3
name3 0 4


・欲しい結果
|col_a|col_b|col_c
-----------------
name1 1  0
name1 0  3
name3 0 3
name3 0 4

・説明
列col_aの文字列が同じで、col_bとcol_cの数値が一致しないタプルを取り出したいのですが
どのようなSQLでいけるでしょうか?よろしくお願いします。
コメント3件

333
NAME IS NULL[sage]   投稿日:2017/05/29 23:52:29  ID:???.net(463)
>332
SELECT S1.col_a, S1.col_b, S1.col_c
FROM 'テーブル名' S1 , 'テーブル名' S2
WHERE S1.col_a = S2.col_a
AND (S1.col_b <> S2.col_b OR S1.col_c <> S2.col_c)
ORDER BY S1.col_a ;

間違ってたらごめん

334
NAME IS NULL[]   投稿日:2017/05/29 23:57:58  ID:ppw3vS3C.net
>332
グループ化で複数レコードが存在存在するnameを排除すればいい。

335
NAME IS NULL[sage]   投稿日:2017/05/30 00:12:21  ID:???.net(463)
複数レコードが存在するレコードを削除すればよい、ではなくてか。
having count(*) = 1 みたいに。

336
NAME IS NULL[sage]   投稿日:2017/05/30 00:13:06  ID:???.net(463)
削除っていうと聞こえが悪いけど、そこはご勘弁

337
NAME IS NULL[]   投稿日:2017/05/30 14:28:59  ID:dt3JZxtj.net
>332
DISTINCT

338
NAME IS NULL[sage]   投稿日:2017/05/30 14:35:58  ID:???.net(463)
まとめると
SELECT col_a, col_b, col_c FROM テーブルデータ GROUP BY (col_a, col_b, col_c) HAVING COUNT(*) = 1
こうかね?
ORDER BYもいるとは思うけど

DISTINCTは name2 0 2 も1件でちゃうような

339
NAME IS NULL[sage]   投稿日:2017/05/30 15:13:05  ID:???.net(463)
select * from テーブルデータ where col_a in (select col_a from テーブルデータ group by col_a,col_b,col_c having count(*) = 1);

340
NAME IS NULL[sage]   投稿日:2017/05/30 16:13:29  ID:???.net(463)
a,b,c以外にも表示したいときはそうなるか
まあ (a,b,c) in (select a,b,c from 〜 ) とかになるだろうけども

341
NAME IS NULL[]   投稿日:2017/07/11 14:39:34  ID:VmiHpvub.net
項目A,B,C,Dの値を入れ替えたいです。
・DBMS名とバージョン:postgreSQL 8.4.13
・テーブルデータ
A B C D
1 2 3 4
1 2 3 4
2 3 4 1
このテーブルのAの値をBに、Bの値をCに、Cの値をDに、Dの値をAに入れたいです。
A B C D
4 1 2 3
4 1 2 3
1 2 3 4
としたいです。

UPDATE TABLENAME SET A = D, B = A, C = B, D = C;
でよいのでしょうか。よい場合、変更する項目数が50位でも大丈夫でしょうか。
検索したところ、2項目の入れ替えはこれでよいようなのですが、
複数(多数)の場合でもよいものか教えていただきたいです。
よろしくお願いします。
コメント2件

342
NAME IS NULL[sage]   投稿日:2017/07/11 14:42:47  ID:???.net(463)
>341
それでいい
コメント1件

343
NAME IS NULL[sage]   投稿日:2017/07/12 02:12:00  ID:???.net(463)
>342
ありがとうございました。自信を持って(?)作業します。

344
NAME IS NULL[sage]   投稿日:2017/07/12 05:24:51  ID:???.net(463)
え、BにDの値入らない?大丈夫?
コメント2件

345
NAME IS NULL[sage]   投稿日:2017/07/12 10:20:42  ID:???.net(463)
>344
大丈夫

updateが完全に完了するまでは古いレコードは残っていて(そうしないとrollbackできない)、
>341のクエリは、更新前のレコードをold、更新後のレコードをnewとするなら、
UPDATE TABLENAME SET new,A = old.D, new,B = old.A, new,C = old.B, new,D = old.C
というような処理が行われる
コメント2件

346
341[sage]   投稿日:2017/07/12 12:30:52  ID:???.net(463)
レスありがとうございます。
>344 >345
検索して調べたときに知ったのですが、
postgreSQL,SQLserver,おそらくoracleは大丈夫。
MySQLは、左から順に評価するので、たぶんBはDの値になるようです。
みなさん一時項目を使ったり、足し算引き算をしたりして工夫されているようです。
コメント1件

347
NAME IS NULL[sage]   投稿日:2017/07/12 14:25:49  ID:???.net(463)
mysqlは(1,2,3,4) -> (4,4,4,4)になるよ
クソ

348
NAME IS NULL[sage]   投稿日:2017/07/12 14:36:41  ID:???.net(463)
え、SQLってこの程度のことも規約で決まってなかったのか

349
NAME IS NULL[sage]   投稿日:2017/07/12 19:37:23  ID:???.net(463)
>345
>346
質問者じゃないけど、参考になる例題でした。

350
NAME IS NULL[sage]   投稿日:2017/07/12 21:55:04  ID:???.net(463)
一時テーブルを作成して、更新後の並びになるようにコピーする
元テーブルのレコードを削除して、一時テーブルからコピーする

なんてやるのはどうなんだろう?

create temporary table tmp select d as a,a as b, b as c, c as d from TABLENAME;
delete from TABLENAME;
insert into TABLENAME select * from tmp;
コメント1件

351
NAME IS NULL[sage]   投稿日:2017/07/13 05:58:18  ID:???.net(463)
【テンプレ】
・DBMS名とバージョン : mysql Ver 14.14 Distrib 5.1.73,
・テーブルデータ : 添付画像をご覧ください
・欲しい結果 ; 添付画像をご覧ください

http://fast-uploader.com/file/7055447564296/

・説明

※添付画像では、col1被り数の1行目(セル番地で言うとおB5セル)を例に取っています)
※添付画像の、数式表示欄を見ていただますようお願いいたします。(Excelの式が入っております。)

DB上にテーブルがあり、code1、code2、code3と列があります。
code1、code2、code3の、全ての行の「どこか」でデータが被っています。被っていない所もあります。
被っているのは、同一列だったり、別の列の違う行だったり、はてまて、同じ行の別の列だったり様々です。

これを、col1被り数、col2被り数、col3被り数のように、「被ってる行」をカウントしたいんですが、
方法がさっぱり思いつきません。


何卒ご教示くださいますよう、お願いいたします。
コメント1件

352
341[sage]   投稿日:2017/07/13 13:19:26  ID:???.net(463)
>350
SQLが通るかどうかは置いといて、結果の並び順は保証されていないので
キーを使うなどしないと「たまたま」動作したということになると思います。
コメント1件

353
NAME IS NULL[sage]   投稿日:2017/07/13 16:49:04  ID:???.net(463)
>351
元テーブル名が分からなかったので、partsと仮定した

http://ideone.com/wZK0bA
コメント1件

354
NAME IS NULL[sage]   投稿日:2017/07/13 19:57:15  ID:???.net(463)
>352
「列の」並び順の話だろ
コメント1件

355
NAME IS NULL[sage]   投稿日:2017/07/13 20:46:37  ID:???.net(463)
>353
ありがとうございます!印刷して家宝にします!!!

356
341[sage]   投稿日:2017/07/14 01:19:55  ID:???.net(463)
>354
列の並び順を替えるにしても、行の順が元テーブルと違っちゃうかも
しれませんよという話です。
キーの部分を書くのが面倒で省略したということかもしれません。

357
NAME IS NULL[sage]   投稿日:2017/07/14 01:28:39  ID:???.net(463)
行の順序が変わったとしても、それが何か影響を与えるとは思わないんだが
コメント1件

358
341[sage]   投稿日:2017/07/14 09:16:50  ID:???.net(463)
>357
なるほど了解。

359
NAME IS NULL[sage]   投稿日:2017/07/14 10:11:57  ID:???.net(463)
mysqlならストアドだろうな

360
NAME IS NULL[sage]   投稿日:2017/07/16 03:19:50  ID:???.net(463)
初めてVPSで構築しています。
MySQL設定でハマってます。

Pleskだと/etc/my.cnfや/etc/php.d/mysql.iniは無視されるのでしょうか?
my.cnfに書いてみたんですが、どうも反映されてないようです。

MySQLTunerを実行してみると
failed to execute: SELECT VERSIONのようなのが鬼のように表示され、
General recommendationsに下記のように表示されてます。

query_cache_size (=0)
query_cache_type (=0)
query_cache_limit (> 1M, or use smaller result sets)
join_buffer_size (> 128.0K, or always use indexes with joins)
tmp_table_size (> 16M)
max_heap_table_size (> 16M)
thread_cache_size (start at 4)
table_open_cache (> 400)
performance_schema = OFF disable PFS
innodb_file_per_table=ON
innodb_log_file_size * innodb_log_files_in_group should be equal to 1/4 of buffer pool size (=64M) if possible.

(=0)は0にしなさい。
(> 1M)は1MB以上に指定しなさい。
それに合わせてmy.confに入れてみたんですが、
これが全く変わりません。

361
NAME IS NULL[sage]   投稿日:2017/07/16 10:22:53  ID:???.net(463)
straceしてみてどの設定ファイル読んでるか確認してみたら?

362
NAME IS NULL[sage]   投稿日:2017/07/17 08:19:42  ID:???.net(463)
久しぶりに来た半初心者なのですが、上の方の議論で出てた会計年度の話は、単に引き算を利用してはいけなかったんでしょうか

4ヶ月引いて1日足して、としてやれば安定して通常年度に戻せる気がするのですが

363
NAME IS NULL[]   投稿日:2017/07/17 10:26:23  ID:ELQvIlPL.net
日付から年度を求めたい、という話?
そういうのでもいいけどそれ間違ってるからね
コメント1件

364
NAME IS NULL[sage]   投稿日:2017/07/17 10:28:40  ID:???.net(463)
どの話をしようとしているのか分からん

4ヶ月引いて1日足すというだけでも
30日に1日足したら31日になるのか1日になるのかどう判断するんだ?

365
NAME IS NULL[sage]   投稿日:2017/07/17 10:39:33  ID:???.net(463)
>363
ほんとだ
なんで足す1出てきたし4なんですかね

なんにせよありがとう

366
NAME IS NULL[sage]   投稿日:2017/07/23 12:32:38  ID:???.net(463)
例えば、左から右に行って、
途中でジェイってなって、そのまま終わったらいいかと思うんですが。
新しいSQLの概念というか。
コメント1件

367
NAME IS NULL[sage]   投稿日:2017/07/23 15:48:13  ID:???.net(463)
>386が何を言ってるのかさっぱり判らぬ

368
NAME IS NULL[sage]   投稿日:2017/07/23 15:48:48  ID:???.net(463)
間違えた。 >386じゃなく>366だった^^;

369
NAME IS NULL[sage]   投稿日:2017/07/23 16:38:22  ID:???.net(463)
大丈夫、俺も分からん

370
NAME IS NULL[sage]   投稿日:2017/07/23 16:58:56  ID:???.net(463)
RDBMS使ってRPG作ろうとしているのかな?

371
NAME IS NULL[]   投稿日:2017/07/23 19:13:31  ID:ic0ZKVtq.net
月末日なんて翌月の1日前なのになw
コメント2件

372
NAME IS NULL[sage]   投稿日:2017/07/23 19:42:03  ID:???.net(463)
>371
その翌月の日が1日だったらな
コメント2件

373
NAME IS NULL[sage]   投稿日:2017/07/23 19:49:11  ID:???.net(463)
>372
は?

374
NAME IS NULL[sage]   投稿日:2017/07/23 21:05:31  ID:???.net(463)
>372
月末の次の日が1日じゃないケースってなに?

375
NAME IS NULL[sage]   投稿日:2017/07/23 21:59:12  ID:???.net(463)
>371の言う「翌月の1日前」が「翌月の1日の1日前」という意味なら、ってことだろ。

376
NAME IS NULL[sage]   投稿日:2017/07/23 22:36:23  ID:???.net(463)
7月23日の翌月の1日前は8月22だろjk

377
NAME IS NULL[sage]   投稿日:2017/07/23 22:46:18  ID:???.net(463)
おまえ、そんな頭のレベルでよくSQL云々出来るなぁ

378
NAME IS NULL[sage]   投稿日:2017/07/23 23:25:31  ID:???.net(463)
IPAの試験が、読解力を試されるような問題だらけになるわけだ。

379
NAME IS NULL[sage]   投稿日:2017/07/23 23:40:56  ID:???.net(463)
営業日の話ししてんじゃないのか

380
NAME IS NULL[sage]   投稿日:2017/07/24 00:34:13  ID:???.net(463)
複数の同一形式のcsvからデータを読み取る時、普通は↓こんな風に定義するけど、

[001.csv]
[002.csv]
[003.csv]
Col1=F1 Char Width 255
Col1=F2 Char Width 255

ユニオンで縦連結する時は、↓こうじゃないと定義内容が反映されない。

[001.csv]
Col1=F1 Char Width 255
Col1=F2 Char Width 255

[002.csv]
Col1=F1 Char Width 255
Col1=F2 Char Width 255

[003.csv]
Col1=F1 Char Width 255
Col1=F2 Char Width 255

何で?

381
NAME IS NULL[sage]   投稿日:2017/07/26 22:15:23  ID:???.net(463)
・tableA
日付、名前、国語、算数、英語
5/1 赤木 100、100
5/1 三井 50、70
5/1、桜木、40、20

6/1 赤木 100、100
6/1 三井 50、50
6/1、桜木、20、40

7/1 赤木 100、100
7/1 三井 70、70
7/1、桜木、50、50

・tableB
採点開始日、名前 
7/1、桜木
5/1、赤木
6/1、三井

・採点平均
名前、国語平均、英語平均
赤木 100、100
三井 60、60
桜木 50、50


↑のテーブルAのデータを
テーブルBの採点開始日からの採点平均をだしたい
↓で大丈夫だろうか? あらかじめJoinしておいたほうがレスポンス的にはよいのかな?

SELECT tableA.名前,AVG(tableA.国語)AS 国語平均,AVGtableA.英語)AS 英語平均
FROM tableA,tableB
WHERE tableA.日付 >= tableB.採点開始日
AND tableA.名前,tableB.名前
コメント2件

382
NAME IS NULL[sage]   投稿日:2017/07/26 22:18:02  ID:???.net(463)
>381
tableA は
日付、名前、国語、英語
です。

383
NAME IS NULL[sage]   投稿日:2017/07/26 22:38:14  ID:???.net(463)
>381

SELECT tableA.名前,AVG(tableA.国語)AS 国語平均,AVG(tableA.英語)AS 英語平均
FROM tableB
inner join tableA
on tableA.日付 >= tableB.採点開始日
AND tableA.名前=tableB.名前
group by tableA.名前
でいいんじゃないかな
コメント2件

384
NAME IS NULL[sage]   投稿日:2017/07/26 22:55:56  ID:???.net(463)
>383
ありがとうございます
join したほうがいいのかな
これを参考にしてやってみます。
コメント1件

385
NAME IS NULL[sage]   投稿日:2017/07/27 11:16:31  ID:???.net(463)
>384
データ量はたぶんたかだか数万レコード程度だろうから、どんなやり方でもパフォーマンス的には気にする必要ないと思うよ

386
NAME IS NULL[sage]   投稿日:2017/07/27 21:34:59  ID:???.net(463)
>383
横からだが、fromとwhereで結合しても、joinで結合しても
書き方が違うだけで同じだぞ

パフォーマンス気にするなら、使ってるDBMSの実行計画読めるようにならないと
事前に結合した実データ(のテーブルやビュー)用意するんじゃなければ
SQLの書き方では差がでないのが原則
コメント2件

387
NAME IS NULL[]   投稿日:2017/07/27 22:17:49  ID:Wb6w4MLZ.net
じじいが嘘を広めていることもあるから混乱するんだよな。

388
NAME IS NULL[sage]   投稿日:2017/07/27 22:31:45  ID:???.net(463)
tableAのデータがあった場合、tableBの結果と、tableCのビューが欲しいです。
tableAの補習が入った場合は学校にいくまでの間はすべて補習の時間になります。
まったく書き方が見当がつかないのでアドバイスお願いします

tableA
時間、学校、部活、補習

2017/6/1 06:00:00、NULL、OK、NULL
2017/6/1 07:00:00、NULL、OKL、NULL
2017/6/1 08:00:00、OK、NULL、NULL
2017/6/1 09:00:00、OK、NULL、NULL
2017/6/1 10:00:00、OK、NULL、NULL
2017/6/1 11:00:00、OK、NULL、NULL
2017/6/1 12:00:00、OK、NULL、NULL
2017/6/1 13:00:00、NULL、OK、OK
2017/6/1 14:00:00、NULL、OK、NULL
2017/6/1 15:00:00、NULL、OK、NULL
2017/6/1 16:00:00、OK、OK、NULL
2017/6/1 17:00:00、OK、NULL、NULL
2017/6/1 18:00:00、NULL、OK、NULL
2017/6/1 19:00:00、NULL、OK、NULL
2017/6/1 20:00:00、NULL、OK、NULL
2017/6/1 21:00:00、NULL、OK、NULL

tableB
時間、活動

2時間、部活
5時間、学校
3時間、補習
2時間、学校
4時間、部活

tableC
時間、活動

7時間、学校
6時間、部活
3時間、補習
コメント2件

389
NAME IS NULL[sage]   投稿日:2017/07/27 22:40:11  ID:???.net(463)
他人にわかる説明ができるようになったら解決するんじゃないかな。

390
NAME IS NULL[sage]   投稿日:2017/07/27 22:56:18  ID:???.net(463)
>388
tableBとtableCはビューB,、ビューCをだしたいに訂正します。
ビューCはビューBの部活、学校、補習の合計時間をだします。

tableA は1時間間隔で 活動した予定にOKが付きます

6時と7時は部活をやっているので2時間になります。
そのあと学校が5時間

その次は部活と補習がOKになっていますが
補習がOKなったら、学校がOKになるまで補習の時間なので
補習が2時間になります。

この流れで↓の結果が欲しいです。

ビューB
時間、活動

2時間、部活
5時間、学校
3時間、補習
2時間、学校
4時間、部活

ビューC

7時間、学校
6時間、部活
3時間、補習


SQLだけで書くのは見当がつかないのでアドバイスお願いします。

391
NAME IS NULL[sage]   投稿日:2017/07/27 23:04:51  ID:???.net(463)
SQLだけで書けないと思ったのにSQLスレなのか
DBだけでやれない想定として、どういう風に実装予定なの?
ざっくりでいいからさ(Java使って、とかWindows上でとか)

392
NAME IS NULL[sage]   投稿日:2017/07/27 23:33:31  ID:???.net(463)
SQLだけでできるかわからないので質問しました。
今回のような内容はSQLでやるべきではない?SQLでできてもものすごくめんどくさい?
の状態です。似たような内容を何件か取得したいと思っているのでしりたいです。

SQLだけでビューB、ビューCをだせるなら、Windows上のアプリ でそれを取得してCSVデータにするのが簡単だと思っています。

SQLだけで無理ならtableAのデータからCSVデータを作成のつもりです。

393
NAME IS NULL[sage]   投稿日:2017/07/27 23:42:29  ID:???.net(463)
ビューとして取る必要があるの?
画面に表示したいとか?
取得したデータをそうしたいの?

394
NAME IS NULL[sage]   投稿日:2017/07/27 23:50:08  ID:???.net(463)
ビューとして取れるようにしておけばそのままCSVにだすだけで簡単なのと、
画面に表示したいと思っています。
取得したデータの操作は考えていません。

395
NAME IS NULL[sage]   投稿日:2017/07/27 23:50:42  ID:???.net(463)
データが絶対に1時間間隔で抜けはないってならSQLだけでできるんじゃね

俺ならBはtableA を時間でソートして、ホストアプリでブレークチェックしながらカウントして表示するけどな

396
NAME IS NULL[sage]   投稿日:2017/07/28 00:01:52  ID:???.net(463)
>388
は1時間間隔でなっていますが
秒単位で間隔は一定ではないです。
すみません。

Windows上のアプリはあまり動作増やしたくないなと思っていたんですが
SQLだけでやろうとすると
大変?って感じなのかな
コメント1件

397
NAME IS NULL[sage]   投稿日:2017/07/28 08:06:19  ID:???.net(463)
普通データベースの動作を増やさないように工夫すべきなんだけどな

398
NAME IS NULL[sage]   投稿日:2017/07/28 08:09:22  ID:???.net(463)
> は1時間間隔でなっていますが
> 秒単位で間隔は一定ではないです。
意味不明だし後出しフラグ立ってるしすまんが抜けさせてもらうわ

399
NAME IS NULL[sage]   投稿日:2017/07/28 09:06:32  ID:???.net(463)
最初からずーっと意味不明だったな

400
NAME IS NULL[]   投稿日:2017/07/28 11:05:37  ID:IsxTOLxk.net(4)
>396
初心者か?SQLは呪文ではない。

401
NAME IS NULL[]   投稿日:2017/07/28 11:06:54  ID:IsxTOLxk.net(4)
ロジックを隠蔽すると軽くなる理屈が不明

402
sage[]   投稿日:2017/07/28 13:06:18  ID:UiVRAQM3.net(2)
mdbファイルをDSNで一般に公開する方法を教えてください。
perl公開ならiisを使えばよいことは分かります。
pdf公開ならftpサーバを使えばよいことは分かります。
mdbファイルはiisを使って公開できるのでしょうか?
iisには接続文字列の設定がありますが意味が分かりませんでした。
odbcad32.exeはネットワーク越しは無理みたいでしたし。
ACCESSというお高いソフトにはmdbファイルを公開できる
サーバ機能が含まれているのでしょうか?
コメント2件

403
NAME IS NULL[sage]   投稿日:2017/07/28 13:09:57  ID:???.net(463)
>402
データベース(ファイル)を一般公開してはいけません

404
NAME IS NULL[]   投稿日:2017/07/28 17:22:29  ID:IsxTOLxk.net(4)
公開って何?

405
NAME IS NULL[sage]   投稿日:2017/07/28 17:34:26  ID:???.net(463)
mdbはファイル共有型だから
そのmdbファイルをファイル共有できるようにすればOK

とレスしてみたけど
そのレベルで一般に公開するのはやめとけ

406
NAME IS NULL[]   投稿日:2017/07/28 18:01:40  ID:IsxTOLxk.net(4)
答えてる方も何をいってんのかw

407
NAME IS NULL[sage]   投稿日:2017/07/28 19:15:12  ID:???.net(463)
共有はいいけど公開はダメってだけでしょ

408
NAME IS NULL[sage]   投稿日:2017/07/28 21:58:07  ID:???.net(463)
さすがにイントラでってことなんだろうけど、それでも公開はまずいっしょ

409
NAME IS NULL[]   投稿日:2017/07/28 22:35:23  ID:UiVRAQM3.net(2)
漏れをそのレベルとしか見れない人よりはレベル高いと思ってる。
ここまで6件のレスがついたが誰人答えを知らないほどレベルの高い質問をしてしまった。
漏れよりレベルの高い人を待つ。
合計7人が回答をお待ちしています。
コメント1件

410
NAME IS NULL[sage]   投稿日:2017/07/29 00:45:43  ID:???.net(463)
>409
とりあえず2chで質問とかアホなことしてる時点で低レベルやぞ?

411
NAME IS NULL[]   投稿日:2017/07/29 01:12:28  ID:HlUqV4Yy.net
分かっておる。しかしそんな漏れよりももっとレベルの低い人が見つかった気がして
ちょっとうれしくなった。
あんたも答える知識の無い低レベルだな。
FileMaker入れて漏れは今解決したよ。
7人の戦士のうち結果的に漏れが一番レベルが上になったようだ。
ばいばい。
コメント1件

412
NAME IS NULL[sage]   投稿日:2017/07/29 01:45:14  ID:???.net(463)
低いレベルというか専門性が違うだけでしょ
SQLスレで聞くのも違う気がするし

413
NAME IS NULL[sage]   投稿日:2017/07/29 01:51:03  ID:???.net(463)
聞けるスレがないと言うのも気の毒だったけど
しかし、もっと違うアプローチをすべきだとは思った

414
NAME IS NULL[sage]   投稿日:2017/07/29 02:02:41  ID:???.net(463)
MDBファイルはADOを使ってPHPからアクセス出来るので
IIS上で上手くやればWebサイトとして構築出来るんじゃないかな?
コメント1件

415
NAME IS NULL[]   投稿日:2017/07/29 05:31:07  ID:wCmqTHAL.net(2)
彼はデータのを表示させるためなら、どんな方法でもよいとしか言ってないぞ?
コメント1件

416
NAME IS NULL[]   投稿日:2017/07/29 05:37:16  ID:wCmqTHAL.net(2)
FTPでファイル転送してるらしいから、mdbファイルを渡せばいいんじゃないのか?

417
NAME IS NULL[sage]   投稿日:2017/07/29 12:18:07  ID:???.net(463)
初心者てレベル争い好きだなw

418
NAME IS NULL[sage]   投稿日:2017/07/30 00:15:18  ID:???.net(463)
>414
Webサイト構築したいとか言う話じゃないし、それが出来るレベルの人間の質問でもないけど

>415
彼って誰だよ
表示出来ればどんな方法でもいいとか誰がいってるの?

mdbをDSNで直接指定できるようにするにはファイル共有でアクセスできるようにすればいい
それを一般に公開するかどうはやる奴が決めればいい
コメント1件

419
NAME IS NULL[sage]   投稿日:2017/07/30 00:24:21  ID:???.net(463)
>418
でも、iisやftpの話を出してきてるし
一般に公開する方法ってことだから
内容を表示出来れば要件は満たしそう

420
NAME IS NULL[]   投稿日:2017/07/30 16:59:29  ID:J2rDve9a.net
>402 は何を公開するとも言ってない。

Perlのスクリプトを公開するのもコードを公開するとも受け取れる。

PDFファイルはなぜかFTPでダウンロードさせてるあたりから、助言する段階の情報がまだない。
コメント1件

421
NAME IS NULL[sage]   投稿日:2017/07/30 17:45:16  ID:???.net(463)
PostgreSQLでいうと、port 5432をインターネットに公開したいってことでしょ

422
NAME IS NULL[sage]   投稿日:2017/07/30 22:13:58  ID:???.net(463)
>420
>mdbファイルをDSNで一般に公開する方法を教えてください
って言ってるけど?

423
NAME IS NULL[sage]   投稿日:2017/07/30 23:15:07  ID:???.net(463)
文盲かな?

424
NAME IS NULL[sage]   投稿日:2017/07/31 00:05:16  ID:???.net(463)
ここのスレは>411にとって
>漏れよりももっとレベルの低い人
の集まりで
>答える知識の無い低レベル
らしいから、そんなのこちらが考えるだけ無駄

425
NAME IS NULL[]   投稿日:2017/07/31 04:43:26  ID:lcWS9MWM.net
WebブラウザでAccessの画面を開きたいレベルの話だと思うけどな。

PDFファイルをローカルで開いていることもわからないくらいだから。

426
NAME IS NULL[]   投稿日:2017/08/03 21:28:57  ID:UD0thFWN.net
すいません質問です
記事テーブルとカテゴリテーブルがあるのですがそれぞれのID部分を post_id category_id とするのか、単に id とするのかどちらがいいでしょうか?
コメント1件

427
NAME IS NULL[sage]   投稿日:2017/08/03 23:04:48  ID:???.net(463)
ネーミングの問題?自分で作ってるものなんだろうけど、3ヶ月後の自分は他人なんだから、そんなしょーもないところで
手を抜かずにちゃんとした名前、この場合ならpost_ , category_ 等々にしたら?

428
NAME IS NULL[]   投稿日:2017/08/03 23:11:37  ID:WNAOpieS.net(2)
>426
そのIDが同じものでないなら、ただのIDという名前はやってはいけないレベルの命名。
コメント1件

429
NAME IS NULL[sage]   投稿日:2017/08/03 23:15:52  ID:???.net(463)
作った当初は覚えているだろうけど
何年か経ってSQLソースを見た時に

「このidってなんだったっけ?」

てことになる

430
NAME IS NULL[]   投稿日:2017/08/03 23:41:59  ID:WNAOpieS.net(2)

431
NAME IS NULL[sage]   投稿日:2017/08/03 23:42:49  ID:???.net(463)
>428
そうでもない

432
NAME IS NULL[sage]   投稿日:2017/08/04 00:16:01  ID:???.net(463)
普通にidでええやろ
category.category_idとかアホみたいやん
コメント1件

433
NAME IS NULL[sage]   投稿日:2017/08/04 00:26:25  ID:???.net(463)
>432
これ

434
NAME IS NULL[sage]   投稿日:2017/08/04 00:27:50  ID:???.net(463)
デフォルトは主キーがIDのフレームワークもある時代に何言ってんだか
コメント1件

435
NAME IS NULL[]   投稿日:2017/08/04 00:40:24  ID:lQ2EAqCJ.net(5)
>434
データベースに詳しくないのが無茶苦茶なことをやるんだよな。

436
NAME IS NULL[]   投稿日:2017/08/04 00:41:55  ID:lQ2EAqCJ.net(5)
ナチュラルジョインも知らないのが設計するとそうなる。

437
426[]   投稿日:2017/08/04 01:06:51  ID:ps9NmLsK.net
皆様ありがとうございますm(_ _)m
idは他のテーブルでも使用されるので post_id などに統一しようと思います

438
NAME IS NULL[sage]   投稿日:2017/08/04 14:36:14  ID:???.net(463)
どんなテーブルだろうが id は id やろ?
テーブル見ればなんの id か分かるだろ?
アホはアホなとこに神経使うんだな(笑)

439
NAME IS NULL[sage]   投稿日:2017/08/04 16:26:24  ID:???.net(463)
maker.code (PK)
product.code (PK)
設計はともかくこういう命名規則も許せないのか、気になるところね

440
NAME IS NULL[sage]   投稿日:2017/08/04 16:39:09  ID:???.net(463)
id列にも名前に修飾詞をつけておくとusing句が使いやすいというメリットがあるんやで
なんでも原理原則に従うのがいつも最良の方法とは限らんのや

441
NAME IS NULL[sage]   投稿日:2017/08/04 16:53:10  ID:???.net(463)
テーブル以外のidも意識しろって話でしょ
全部idだとどこの何のidか意識する必要あるし、外部キーとしてidが多々あるとNGだね

442
NAME IS NULL[sage]   投稿日:2017/08/04 17:25:24  ID:???.net(463)
テーブル名指定したらいいだけやん
コメント2件

443
NAME IS NULL[sage]   投稿日:2017/08/04 17:32:23  ID:???.net(463)
>442
だよね

444
NAME IS NULL[]   投稿日:2017/08/04 18:30:50  ID:sgWQZKSP.net(3)
ナチュラルジョインも知らないのが設計するとそうなる。
コメント1件

445
NAME IS NULL[sage]   投稿日:2017/08/04 18:43:29  ID:???.net(463)
>444
最近覚えた言葉を使いたがるやつっているよね

446
NAME IS NULL[]   投稿日:2017/08/04 18:48:16  ID:sgWQZKSP.net(3)
同じカラム名で意味の異なる属性は、RDBではないな。そのテーブルの主キーではあるが、業務上、意味がない値を格納するだけだとしてもよろしくない。MS-Accessの古い慣習の影響か。
コメント2件

447
NAME IS NULL[sage]   投稿日:2017/08/04 19:00:50  ID:???.net(463)
あのさぁ、1プロジェクトで数百以上のテーブルとか普通にあるんだけど、それぞれユニークなカラム名付けるのか?

448
NAME IS NULL[sage]   投稿日:2017/08/04 19:02:00  ID:???.net(463)
>446
おまえ独特なRDBの定義だな(笑)

449
NAME IS NULL[]   投稿日:2017/08/04 19:07:45  ID:sgWQZKSP.net(3)
カラム名が同じなら、その項目同士にリレーションシップがあると考えるのが標準SQL。
コメント2件

450
NAME IS NULL[sage]   投稿日:2017/08/04 19:42:37  ID:???.net(463)
>449
はっ?
そんな仕様にはなっていない
コメント1件

451
NAME IS NULL[]   投稿日:2017/08/04 19:47:30  ID:lQ2EAqCJ.net(5)
>450
リレーションシップは外部キー制約があるかどうかではない。

452
NAME IS NULL[sage]   投稿日:2017/08/04 19:59:03  ID:???.net(463)
>449
ソース

453
NAME IS NULL[sage]   投稿日:2017/08/04 19:59:47  ID:???.net(463)
>446
どこの世界の話だよ

454
NAME IS NULL[]   投稿日:2017/08/04 20:20:01  ID:lQ2EAqCJ.net(5)
関係リレーショナルデータベース

455
NAME IS NULL[]   投稿日:2017/08/04 20:20:50  ID:lQ2EAqCJ.net(5)
関係データベース

456
NAME IS NULL[sage]   投稿日:2017/08/04 21:08:11  ID:???.net(463)
>442
て言うか単一テーブルだけでないなら普通そうするよね

457
NAME IS NULL[sage]   投稿日:2017/08/04 21:42:18  ID:???.net(463)
テーブル名指定するなら、テーブル名をコラム名の一部に使うのと同じ事になる
コメント1件

458
NAME IS NULL[sage]   投稿日:2017/08/04 23:18:24  ID:???.net(463)
考え方の違いだな。
テーブルはエンティティを表すとするならカラムはその固有の属性だが、もともとのリレーショナルモデルでは
先に属性があってその関係をリレーション(テーブル)として表すわけなんで、同じ属性が異なる複数の
リレーションに含まれ得る。

459
NAME IS NULL[sage]   投稿日:2017/08/04 23:40:12  ID:???.net(463)
>457
ならねーよ

460
NAME IS NULL[sage]   投稿日:2017/08/05 01:35:30  ID:???.net(463)
すみません、SQLの実行の順番ってどうなってるのですか?

select
hoge
from
tableA
inner join (...) subQuery1
on(...)
inner join (...) subQuery2
on(...)
みたいなsqlがあるとき、どのどこから実行されるのですか?
コメント5件

461
NAME IS NULL[]   投稿日:2017/08/05 06:36:08  ID:MeRXBAvD.net(6)
>460
質問がおかしい

462
NAME IS NULL[sage]   投稿日:2017/08/05 07:34:03  ID:???.net(463)
from→where→group by→having→select→union等→order by
の順に実行したかのような結果になる(from内のjoinは左から)
内部動作として実際にこの順で実行しているかはまた別の話
コメント2件

463
NAME IS NULL[]   投稿日:2017/08/05 07:42:50  ID:MeRXBAvD.net(6)
>462
そういう説明はやめた方がいい。

464
NAME IS NULL[sage]   投稿日:2017/08/05 08:14:28  ID:???.net(463)
いや、必要な知識だと思うが。
コメント1件

465
NAME IS NULL[]   投稿日:2017/08/05 08:51:33  ID:MeRXBAvD.net(6)
>464
彼の質問はインランビューだと思う。
コメント1件

466
NAME IS NULL[sage]   投稿日:2017/08/05 09:21:04  ID:???.net(463)
サブクエリもfrom句の内なんだからそのように解釈すればいいだろう。そもそも何を問題にしているのかわからん。

>460の質問はおかしい
>460の質問はインラインビューについて聞いている
>460の質問はインラインビューについて聞いているが質問がおかしい

どれ?
コメント1件

467
NAME IS NULL[]   投稿日:2017/08/05 09:30:25  ID:MeRXBAvD.net(6)
>466
初心者なんだから、そんなのあたりまえだということがわからない。

話をすっとばしてはいけない。

468
NAME IS NULL[sage]   投稿日:2017/08/05 09:55:24  ID:???.net(463)
その「あたりまえ」は>462の知識を前提にしているんだから順序はそれでいいんだよ。何をすっとばしたって?
それにそもそも、>460がそのあたりまえのことを理解できない初心者だと決めつけるのもおかしいだろう。

一連のレスを見返してみると、お前は中身のないケチをつけるしか能がないのか?しかも支離滅裂。

469
NAME IS NULL[sage]   投稿日:2017/08/05 10:40:13  ID:???.net(463)
>465
淫乱ビュー!?

470
465[sage]   投稿日:2017/08/05 11:06:11  ID:???.net(463)
すみません。SQL初心者なのにここで質問してしまいました。
知りたかったことは下記のようなことです。

subQuery1,2はTableAを別名化したものです。subQuery内にはそれぞれwhere条件があります。

subQuery1内のwhere句のregist_dateが2017/08/04between2017/08/05

subQuery2内のwhere句のregist_dateが2000/01/01between2017/08/05


このとき、subQuery2内のwhere句には、2017/08/04~2017/08/05のフィルタがかかった状態で検索されるのですか?
それともフィルタがかからない状態で検索され、2000/01/01~2017/08/05までの全レコードが検索され、
その上で内部結合の結合条件のレコードが抽出されるのですか?
コメント2件

471
NAME IS NULL[sage]   投稿日:2017/08/05 11:48:15  ID:???.net(463)
概念的には各サブクエリは独立して実行されると考えてよいが、
それをjoinした結果からは区別がつかん場合もある。
もちろん実際の実行順序は別の話。

472
NAME IS NULL[]   投稿日:2017/08/05 14:00:31  ID:MeRXBAvD.net(6)
>470
同じSELECT文の中で同じテーブルを検索したら、それはそれで結果のビューができるという考え方でよい。

RDBMSによって内部の実装は異なるし、データの統計情報によっても処理方法は異なる。

473
NAME IS NULL[]   投稿日:2017/08/05 14:05:36  ID:MeRXBAvD.net(6)
>470
内部結合だから結合条件によっては、同じ結果になるか、初心者にありがちな検索結果からSQLが正しいかどうかを確認してるのか?

474
NAME IS NULL[sage]   投稿日:2017/08/06 11:03:43  ID:???.net(463)
日本語下手な奴は迷惑

475
NAME IS NULL[sage]   投稿日:2017/08/06 11:09:38  ID:???.net(463)
外国人に日本語を下手なのを納得です

476
NAME IS NULL[sage]   投稿日:2017/08/10 17:31:03  ID:???.net(463)
SQL初心者のスレが無いorz
mysqlですがちょっと教えて下さい
table nulltest
id int primary key,
price1 int not null,
a__price1 int default null
というテーブルで

a_price1がnullでないならそれを採用、
a_price1がnullならprice1を採用
id price1 a_price1
1 , 10 , 8
3 , 122 , 100
10 , 10 , null
とあるなら
1 , 8
3 ,100
10, 10
と出したい。SQLで出来ませんか?

477
NAME IS NULL[sage]   投稿日:2017/08/10 20:25:08  ID:???.net(463)
インジェクション扱いされて
SQL文、書き込めない。

478
NAME IS NULL[sage]   投稿日:2017/08/10 20:27:07  ID:???.net(463)
>a_price1がnullでないならそれを採用、
>a_price1がnullならprice1を採用

coalesce(a__price1,price1) as a_price1

全角を半角に直して
コメント1件

479
NAME IS NULL[sage]   投稿日:2017/08/10 20:45:02  ID:???.net(463)
>478

その引数を最初から評価して最初にNULL値でない引数を返す

ということで最初にa__price1を持ってくるということですか。
ありがとうございます
コメント1件

480
NAME IS NULL[]   投稿日:2017/08/11 10:43:48  ID:b98NF32s.net
>479
彼は関数を使えと言ってるけど、CASE式でもいいけどな。

481
NAME IS NULL[sage]   投稿日:2017/08/11 23:37:00  ID:???.net(463)
476です。あ〜、case式ですか

case when a_price1 is null then price1 else
a_price1 end as a_price1
でも出来ました。ありがとうございます。

482
NAME IS NULL[sage]   投稿日:2017/08/19 02:13:10  ID:???.net(463)
IDEなんかに出てくるフォルダがスキーマってやつだよね?
でテーブルがあると
スキーマとテーブルの間のフォルダみたいな奴はなんなの?
コメント1件

483
NAME IS NULL[sage]   投稿日:2017/08/22 12:29:00  ID:???.net(463)
スキーマとテーブルの間のやつだろ論理的に考えて

484
NAME IS NULL[]   投稿日:2017/08/22 12:57:26  ID:c5XGebwI.net
>482
どのRDBMSかわからないが、GUIのツールによっては、他のユーザーのスキーマ、データベースオブジェクトがぶら下がっているかのように見えるものがある。

485
NAME IS NULL[sage]   投稿日:2017/08/24 21:53:48  ID:???.net(463)
ExcelでWith使いたいんですけど、何とかなりません?
もちろん、With〜End WithのWithじゃなくて、SQLのWithです。
コメント5件

486
NAME IS NULL[]   投稿日:2017/08/24 22:39:48  ID:BMRgLesK.net
>485
その説明では何を言ってるのかわかりません。
コメント1件

487
NAME IS NULL[sage]   投稿日:2017/08/25 00:27:12  ID:???.net(463)

488
NAME IS NULL[sage]   投稿日:2017/08/25 02:54:28  ID:???.net(463)
temp table的な使い方のWITH句について言ってるんだと思うけど
DBサーバー、DBドライバ、実際のクエリ、この辺りの情報そろえて
DB製品スレかExcelスレで聞いたほうがいい
コメント1件

489
NAME IS NULL[sage]   投稿日:2017/08/25 15:58:24  ID:???.net(463)
>485
With B

490
NAME IS NULL[sage]   投稿日:2017/08/25 17:47:25  ID:???.net(463)
>485
日本語の勉強やり直したら?

491
NAME IS NULL[]   投稿日:2017/08/25 20:09:29  ID:t92cdcnK.net
ネット上でよく見かける困ったバカの特徴

自分が理解出来ないとすぐに相手の言語能力不足を指摘する(しかも割と本気)
コメント1件

492
NAME IS NULL[]   投稿日:2017/08/25 21:46:33  ID:PpXsPpW0.net
>491
仮定での回答ほどたいへんなものはない。

493
NAME IS NULL[sage]   投稿日:2017/08/25 22:44:29  ID:???.net(463)
>486
>487
いや、485にも書きましたけど、SQLのWithですって。
VBAのWith〜End WithのWithじゃないです。

>488
そのWithです。
Excelスレって、そっちの人達じゃわからないですよ。
あと、DBサーバーとかDBドライバって、
使えるかどうかは、それに依存するんですか?
コメント3件

494
NAME IS NULL[sage]   投稿日:2017/08/25 22:47:33  ID:???.net(463)
WITHなら分かるけどWithは分からないにゃあ
コメント2件

495
NAME IS NULL[sage]   投稿日:2017/08/25 22:52:13  ID:???.net(463)
>494
!?
SQLって小文字使えるでしょ!?
少なくともExcelなら、SelectとかFromとか、小文字使えますよ。

496
NAME IS NULL[sage]   投稿日:2017/08/25 23:42:02  ID:???.net(463)
>493
お前、>1も読めないバカか?

497
NAME IS NULL[sage]   投稿日:2017/08/25 23:44:55  ID:???.net(463)
>485
相手のDBMSによるので最低限何のDB使ってるのか書け
接続方法等によってSQLの発行方法が微妙に違うからそれも書け
コメント2件

498
NAME IS NULL[sage]   投稿日:2017/08/25 23:52:02  ID:???.net(463)
自分が分かっていない事を分かっていないんだろうから何を言っても無駄
コメント1件

499
NAME IS NULL[sage]   投稿日:2017/08/25 23:58:49  ID:???.net(463)
>498>497あてです

500
NAME IS NULL[sage]   投稿日:2017/08/26 00:09:13  ID:???.net(463)
ネズミをいたぶる猫を連想してしまった

501
NAME IS NULL[sage]   投稿日:2017/08/26 00:15:40  ID:???.net(463)
>493
推測するに、ODBCかなにか使って、外部のDBを扱いたいのだろうと思う
その場合、外部のDBが何であるか、例えばOracleとかMySQLとか
そして、そのDBに対してどのような接続方法をするか、
質問する際にそういう情報として出さないと、誰も回答しようがないと思う
Withが使えるかどうかは、相手次第
コメント2件

502
NAME IS NULL[sage]   投稿日:2017/08/26 00:15:43  ID:???.net(463)
ネズミをいたぶる猫を見て笑ってる人がいるときいて

503
NAME IS NULL[sage]   投稿日:2017/08/26 00:34:58  ID:???.net(463)
>493
ExcelスレってのはExcelのVBAスレな

>使えるかどうかは、それに依存するんですか?
依存する場合もあるし、君が何か間違えてる可能性もある
そもそもサーバー側がサポートしてないケースだってあるだろ
エラーが出てるならそのエラー内容も含めて関連スレで聞きな
SQLの文法でエラーになってるならここで聞けばいいけど
コメント1件

504
NAME IS NULL[sage]   投稿日:2017/08/26 00:39:32  ID:???.net(463)
お前らの優しさを見習いたい

505
NAME IS NULL[sage]   投稿日:2017/08/26 00:41:09  ID:???.net(463)

506
NAME IS NULL[]   投稿日:2017/08/26 01:06:14  ID:SWywwfsW.net
ExcelのシートにADOで繋いでクエリかけたいとかなら無理だぞ
VBA使ってるなら文字列生成を工夫して省力化できるかもしれんが。
ちなみにWITH句もしくはCTE(Common Table Expressions)といったほうが通じる
コメント1件

507
NAME IS NULL[sage]   投稿日:2017/08/26 12:21:03  ID:???.net(463)
>501
完全に間違った推測ワロタw
しゃべるなバカw
コメント1件

508
NAME IS NULL[]   投稿日:2017/08/26 12:23:51  ID:xlgNQVZl.net(3)
>507
おまえ、質問者だろ?

前もそういう態度だったよな?
コメント1件

509
NAME IS NULL[sage]   投稿日:2017/08/26 12:26:29  ID:???.net(463)
>508
違うわw
質問に群がる教えたがりのバカを笑ってるだけだw
お前みたいなバカなw

510
NAME IS NULL[sage]   投稿日:2017/08/26 13:11:07  ID:???.net(463)
煽りは無視して

511
NAME IS NULL[sage]   投稿日:2017/08/26 14:00:41  ID:???.net(463)
>845が情報を出さない以上無意味

512
NAME IS NULL[sage]   投稿日:2017/08/26 14:47:34  ID:???.net(463)
まあ確かにこの質問者は態度悪いな
コメント1件

513
NAME IS NULL[sage]   投稿日:2017/08/26 18:30:27  ID:???.net(463)
「態度」じゃなくて「頭」な

514
NAME IS NULL[sage]   投稿日:2017/08/26 19:51:42  ID:???.net(463)
>497
>501
相手方は、AccessかExcelかCsvです。
接続方法は、MsQueryかADOしか分かりません。

>503
そのExcelのVBAスレなんですけど、
そっちは、普通の使い方をする人がメインで、
SQLとかWindowsAPIとか、マイナーなのはあんまり話が通じない・・。

ここも、WithがSQLのWithだとわからないで攻撃してくる人がいましたけど、
あっちはもっと酷いです。

>506
無理なんですか・・。
ありがとうございました。
コメント1件

515
NAME IS NULL[]   投稿日:2017/08/26 20:02:14  ID:UyefH8h9.net(3)
>512,513
お前らの頭なw
なんでバカのくせに教えたがるの?w

516
NAME IS NULL[]   投稿日:2017/08/26 20:08:01  ID:fS1lbmBN.net
「話が通じない」んじゃなくてお前の書き方がヴァカなんだよ
コメント1件

517
NAME IS NULL[]   投稿日:2017/08/26 20:12:57  ID:UyefH8h9.net(3)
>516←自分のバカをバカにされてバカにしてる奴が質問者だと思いこみたい救いようのないバカw

518
NAME IS NULL[]   投稿日:2017/08/26 20:19:19  ID:xlgNQVZl.net(3)
>514
そもそもあなたの言葉は非常にわかりにくく、大半の日本人は理解できませんよ?
コメント1件

519
NAME IS NULL[]   投稿日:2017/08/26 20:20:33  ID:xlgNQVZl.net(3)
言い方が悪いけど、頭の悪い女性が書く文章に似ている。
コメント1件

520
NAME IS NULL[]   投稿日:2017/08/26 20:33:35  ID:UyefH8h9.net(3)
>519
だから悪いのはお前の頭だと何度w
とはいえすかさずバカ特有の論理性を欠いた女性蔑視発言をねじこんでくるあたりはさすがだなw
バカオブザバカの称号をお前に授けようwww

521
NAME IS NULL[]   投稿日:2017/08/26 22:13:59  ID:5aHU4Upa.net
第三者がかたわらでわめいている構図w

522
NAME IS NULL[sage]   投稿日:2017/08/26 23:00:21  ID:???.net(463)
いつものクズがVBAスレから出張してきててワロタwww

523
NAME IS NULL[sage]   投稿日:2017/08/27 08:01:00  ID:???.net(463)
>518
それはそうです。
分かる人(Withというキーワードだけでピンと来る人)に向けて書いてますから。
コメント1件

524
NAME IS NULL[sage]   投稿日:2017/08/27 08:24:00  ID:???.net(463)
with自体について突っ込まれているんじゃないってことすら読み取れないのか。
ざっと見まわしても>494ぐらいしか見当たらんけどな、そういうのは。

525
NAME IS NULL[]   投稿日:2017/08/27 10:06:46  ID:QBQ1on1X.net
>523
だから、どこでSQLのwith句をどう使おうとしているのか、どう書こうとしているのか、頼むから書いてくれ。
コメント1件

526
NAME IS NULL[sage]   投稿日:2017/08/27 11:43:26  ID:???.net(463)
そうやって甘やかすから図に乗るんだよ

527
NAME IS NULL[sage]   投稿日:2017/08/27 13:17:12  ID:???.net(463)
暇な人(分かるとは言っていない)だけが答えてますから。

528
NAME IS NULL[sage]   投稿日:2017/08/27 18:58:25  ID:???.net(463)
>525
>相手方は、AccessかExcelかCsvです
らしいから、Jet(ACE)だろ
少なくとも俺の知るバージョンではCTEは使えないから
回答として、できないで終了でいんじゃね

529
NAME IS NULL[sage]   投稿日:2017/08/27 20:18:39  ID:???.net(463)
質問者の態度が悪いから終了済み

530
NAME IS NULL[sage]   投稿日:2017/08/28 19:51:37  ID:???.net(463)
Excel VBAスレにいるいつもの奴だからスルーで
自分で質問して自分で回答してる奴ね

お前らどうせ分からないだろ、俺が一番詳しい(キリッ
って態度で質問してる

誰かが回答するとすぐ回答者を装って嫌違うってレスしてくるからすぐわかるぜ
コメント1件

531
NAME IS NULL[sage]   投稿日:2017/08/28 21:28:11  ID:???.net(463)
憐れだな

532
NAME IS NULL[]   投稿日:2017/08/28 22:52:26  ID:XdLa3rwF.net
>530
だからそのwithじゃなく雑誌のwith

533
NAME IS NULL[]   投稿日:2017/08/31 16:21:53  ID:eqJ9vJSf.net
>1
【緊急】
すき家の定食に衝撃異物!
ずさんな管理体制が明らかとなった
指摘したその時!わざとらしく店員が声をあげごまかした!

229 名前:やめられない名無しさん [sage] :2017/08/29(火) 07:31:54.64 ID:EfhOnUp0
俺の朝はいつもすき家
楽しみにしてたのに・・今日に限って朝定食にしたんだ

見てくれ、これが証拠
店員さんも驚いて声をあげてる・・
https://www.youtube.com/watch?v=wjD4hUeU-CA

ちなみに半分食べた
お客様センターが通じない・・病院行く・・
(´・ω・`)すき家が大好きだったのに・・

534
NAME IS NULL[]   投稿日:2017/09/02 17:24:26  ID:fn9CT/Jy.net(2)
LEFT JOINで結合した際に、対応するレコードがない場合
値がnullになりますが、元のテーブルのデフォルト値にするにはどうしたら良いでしょうか?
SELECT句で各clumnにIFNULLは使いたくないです
MySQLを使っています
よろしくお願いします
コメント1件

535
NAME IS NULL[sage]   投稿日:2017/09/02 18:09:41  ID:???.net(463)
LEFT OUTER JOINの話かな?
どっちにしろ、そんな方法はない
IFNULLで地道に埋めるしかない
コメント1件

536
NAME IS NULL[sage]   投稿日:2017/09/02 18:24:43  ID:???.net(463)
>534
CASE式、COALESCE、IFNULL, サブクエリ、デフォルト値有りの一時テーブルへINSERTとかかな
IFNULLを使いたくない理由が手間のみなら諦めたほうがいい
真っ当な理由があるならCASE式での代替を考えるといいのでは
コメント1件

537
NAME IS NULL[]   投稿日:2017/09/02 18:26:33  ID:fn9CT/Jy.net(2)
>535
>536
そうですか・・・
clumnの数がかなりあるので糞面倒ですが地道にやります
ありがとうございました

538
NAME IS NULL[sage]   投稿日:2017/09/02 18:45:22  ID:???.net(463)
ソース全部手で打ち込んでいるのか?
環境が分からないけど、
大概のエディタって置換機能あるだろう

539
NAME IS NULL[sage]   投稿日:2017/09/02 19:42:16  ID:???.net(463)
単純な繰り返しならエクセルの計算式でsql文作ってコピペすれば楽チン

540
NAME IS NULL[sage]   投稿日:2017/09/02 19:57:29  ID:???.net(463)
すごくたくさんあるならSQLを生成するスクリプトを書くとか

541
NAME IS NULL[sage]   投稿日:2017/09/02 21:09:40  ID:???.net(463)
SELECT *, "default" AS [name] FROM foo

こんな感じでfooテーブルのレコードに任意の値をくっつけたものを出力可能
NOT EXISTSとかのサブクエリと組み合わせて、EXISTS側とUNIONで合体する
自分ならまずやらない方法ではあるが

単発のSQLじゃなくアプリケーションで使うSQLだとすると
DB設計かアプリケーション設計かどっちか考えなおしたほうがいいかもね

542
NAME IS NULL[sage]   投稿日:2017/09/02 23:03:08  ID:???.net(463)
「かなりある」とか言ってても実際は大したことない

543
NAME IS NULL[sage]   投稿日:2017/09/02 23:18:50  ID:???.net(463)
CentOS6 + mysql 5.57
社のシステムなので、アップデートやインストール、ログ設定の変更ができない前提です。

まず前置きですが

既存のデータをDB化する一環で、大量(毎日80000行)くらいのinsert文を実行しなければなりません。
insert文自体は、既存のテキストデータから必要事項を抜き出して私が組み立てています。
元のデータはwindowsだったりワープロ専用機だったりですが、最終的に全てUTF-8に変換しています。
まぁこの処理自体はマクロ等駆使してやっているので問題がないのですが、元々のテキストに本来SQLで避けなければならないような半角記号とかが含まれている可能性がありますが、そこまでのチェックは物理的にできません(やっていません)。
一応、改行を\n、半角の引用符号は全角に、程度の処置はしています。
で、この大量のテキストをsource文で読み込んで処理するのですが、所々warning**みたいな表示がでているのがわかります。
登録済み行数のチェックくらいはできますが、フィールドの中身が正しく登録されたかどうかまでのチェックはとても手が回りません。

そこで質問なんですが、SQLを実行する前にエラーになりそうな箇所を知る方法、あるいは、実際にエラーやwarningが出た行を知る方法(ツール、設定)がないでしょうか。
コメント3件

544
NAME IS NULL[sage]   投稿日:2017/09/02 23:37:05  ID:???.net(463)
改行コードを入れてはいけないとか
引用符を入れてはいけないとか
そんな「俺ルール」はDBにとっては知ったこっちゃないので
まずはその「俺ルール」を正確に定義しないと何も始まらない

545
NAME IS NULL[sage]   投稿日:2017/09/02 23:57:36  ID:???.net(463)
>543
エラーが出た行が分からない理由がよく分からない

自分ならINSERTじゃなくインポート(LOAD)使う
8万行くらいならよっぽどレコード長が長くない限りすぐ終わる
でDBからデータをエクスポートして元データと差分比較して検証する
検証が完了したらインポート先のテーブルから本番テーブルへデータ移行する

まあ100件くらいの少量でやり方を確立してから本当に必要な量でやったほうがいいよね
コメント1件

546
NAME IS NULL[sage]   投稿日:2017/09/02 23:58:49  ID:???.net(463)
あとSQLの質問じゃないしMySQLスレで聞いたほうがいいんじゃないの?

547
NAME IS NULL[sage]   投稿日:2017/09/03 00:25:28  ID:???.net(463)
エラーハンドリングのやり方がわからないという意味なのかな?
それなら製品ごとにやり方違うからMySQLスレで聞いたほうがいいと思う

548
NAME IS NULL[sage]   投稿日:2017/09/03 08:08:16  ID:???.net(463)
>543
> そこまでのチェックは物理的にできません(やっていません)。
やれよ...
チェックすべきなのは
https://dev.mysql.com/doc/refman/5.6/ja/string-literals.html
表 9.1 特殊文字エスケープシーケンス を参照

> 実際にエラーやwarningが出た行を知る方法(ツール、設定)がないでしょうか。
tee と warning コマンドで全部出力すればいいだけだろ

まあ何度もやるなら>545の言うようにLOAD(もしくはそれをラップしたmysqlimportコマンド)を使うべきとは思う
https://dev.mysql.com/doc/refman/5.6/ja/mysqlimport.html

549
NAME IS NULL[sage]   投稿日:2017/09/03 09:18:14  ID:???.net(463)
>543
>チェックはとても手が回りません。
なんで?時間が無い、技術が無い?

550
NAME IS NULL[]   投稿日:2017/09/03 10:57:23  ID:O1ZU9t9T.net(2)
もうSQLというより、IT技術者の初心者の質問だよなw

551
NAME IS NULL[sage]   投稿日:2017/09/03 11:54:28  ID:???.net(463)
計算機科学者と宇宙飛行士ってどっちの方が頭いい?
コメント1件

552
NAME IS NULL[]   投稿日:2017/09/03 21:49:26  ID:O1ZU9t9T.net(2)
>551
宇宙飛行士は頭がいいというよりは、超絶バランス感覚がある人でないとできない。

頭が良すぎる人には向いてない。

553
NAME IS NULL[sage]   投稿日:2017/09/04 03:07:24  ID:???.net(463)
自分は生まれつきもの凄く頭が悪いのですが、東京大学理学部数学科に入って数学を学びたいという目標があります。
生まれつきもの凄く頭が悪い人でも、人並み外れた努力を積み重ねれば、その目標を実現することはできると思いますか?
どうでしょうか?
コメント2件

554
NAME IS NULL[]   投稿日:2017/09/05 23:16:20  ID:fWoFV/f/.net
>553
東京大学に入ることは努力で可能なことです。そんなに難しいことではありません。

高校生までに東大に合格するような勉強方法や、強い意志がみなないだけです。

555
NAME IS NULL[sage]   投稿日:2017/09/06 00:06:04  ID:???.net(463)
ネカフェで三田紀房の ドラゴン桜 でも読んどけ

556
NAME IS NULL[]   投稿日:2017/09/06 19:19:21  ID:ARdyJ0VM.net
それをSQLで

557
NAME IS NULL[sage]   投稿日:2017/09/08 00:26:54  ID:???.net(463)
insert into >553(atama)
values
select エッセンス from ドラゴン桜;

558
NAME IS NULL[]   投稿日:2017/09/12 11:19:53  ID:pQpjXKHz.net
MySQL5で1つのカラムに空白区切りの単語がはいっているとします。
テーブル構成は以下の通りです。

id|word
.1|バナナ
.2|バナナ みかん

COUNTで集計したいのですが、
空白文字で区切って「バナナ:2」「みかん:1」のようにすることって出来ますか?
(空白区切りじゃなくてカンマ区切りでもいいです)

別に単語分割したテーブルを用意するのではなく、
1つのテーブルでカラム内の値を分割して集計する方法があれば教えてください
コメント1件

559
NAME IS NULL[sage]   投稿日:2017/09/12 15:45:27  ID:???.net(463)
>558
http://sqlfiddle.com/#!9/e022aa/1

560
NAME IS NULL[sage]   投稿日:2017/09/12 15:46:12  ID:???.net(463)

561
NAME IS NULL[sage]   投稿日:2017/09/12 15:55:17  ID:???.net(463)
各DBでのやり方見たら分かると思うけど
そのケースをSQLで処理するためには
単語分割したテーブルを用意するのと同じような処理が必要

562
NAME IS NULL[]   投稿日:2017/09/13 02:52:44  ID:xvQI2SSS.net(2)
関数従属性の話って「意味論」でいいんだよね?
ある「カラムAから -> カラムB」の従属性があるかどうか
って現在のテーブルに格納されている値を見比べるだけじゃ
わからないよね?
もしカラムAとカラムBの値が全く同じ組み合わせで対応している
ように見えても、それが偶然これまではそうなだけなのかもしれないし、
「A -> B」が「値を見る限り従属している」のが分かったとしても、
それが「直接従属している」か「推移的な従属」なのかって、
値を見てもわからないよね?
カラムの意味を考えたり、値を格納している実装を見ないと
「どんな従属性なのか」ってわからないっすよね?

563
NAME IS NULL[sage]   投稿日:2017/09/13 07:05:44  ID:???.net(463)
そうっすね

564
NAME IS NULL[sage]   投稿日:2017/09/13 07:50:29  ID:???.net(463)
今あるデータがすべてならばデータを見れば判断できる。
それ以外のこれから入れるデータがあるのであれば当然、今あるだけのデータからは判断できない。

565
NAME IS NULL[sage]   投稿日:2017/09/13 12:19:17  ID:???.net(463)
意味論て言ってるのにデータを見ただけで分かるわけないだろ
頭が悪い奴だなw
コメント1件

566
NAME IS NULL[]   投稿日:2017/09/13 13:05:00  ID:xvQI2SSS.net(2)
>565
「意味論だよね?」って確認してるの。
関数従属性について図で例示されてる解説があるだろ?
でもこういうのみてもさっぱり理解できないから、よく考えたら
例示では理解しにくい概念なんじゃないかって思ったんだよ。
やはりそうなのか。

567
NAME IS NULL[sage]   投稿日:2017/09/13 15:52:20  ID:???.net(463)
うん、関数従属性はデータからだけじゃわからないよ

既存のテーブル構造が関数従属性を100%表現できている場合は
データじゃなくその構造を見ることでどういう従属性があるか理解できるかもしれないが
現実には100%表現できてることなんてまずないからね

568
NAME IS NULL[sage]   投稿日:2017/09/13 20:22:58  ID:???.net(463)
集合論を知っていればわかるように、集合自体が構造を表す。
つまり、テーブル内のデータが全体集合なのであればそこに存在する従属性はそれでわかる。
現実的には全体集合を得られていることなんてレアケースだろうから、そのときは
「(いま得られている)データからだけじゃわからない」ってことになるが。
コメント1件

569
NAME IS NULL[sage]   投稿日:2017/09/13 20:53:13  ID:???.net(463)
>568
言い訳が苦しすぎんだろw

{ A , 11 , 999 , タコス , 2017/08/13 }
{ B , 12 , 777 , ドンタコス , 2017/08/14 }
{ C , 13 , 555 , ポリンキー , 2017/08/15 }
{ D , 14 , 333 , ネオポリンキー , 2017/08/16 }
{ E , 15 , 111 , ポンキッキー , 2017/08/17 }
{ F , 16 , 333 , ドストエフスキー , 2017/08/18 }

これが全体集合だったとして、ここに存在する従属性がわかるなら教えてくれよ

570
NAME IS NULL[sage]   投稿日:2017/09/13 21:11:39  ID:???.net(463)
3番目のカラムを除く組み合わせほぼ全てだろ?
Aならばタコスだし2017/08/13だし、ドンタコスならばBだし12だ。

571
NAME IS NULL[sage]   投稿日:2017/09/14 19:05:36  ID:???.net(463)
bigqueryの質問はここでいいですか?

572
NAME IS NULL[]   投稿日:2017/09/14 19:10:31  ID:arvuh5Nr.net
質問スレで念のために自分の聞きたい質問がスレの主旨に合っているかを問うのだが
その問い自体が既にスレの主旨から外れているという矛盾を抱えた石橋叩きの人生
生きるのが大変そうですね
コメント1件

573
NAME IS NULL[sage]   投稿日:2017/09/14 19:28:55  ID:???.net(463)
>572
適切なスレに誘導してくれよw

574
NAME IS NULL[sage]   投稿日:2017/09/14 19:53:49  ID:???.net(463)
BigQuery ってなんだ?
ってググったら Google のサービスか
何を聞きたいのか知らんけど普通に Google に聞けよ
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

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

このスレッドが人気です(実況系)
初めての○○ ★1 (828)フジ実況
ユアタイム★2 (852)フジ実況
NEWS ZERO 2 (966)NTV実況
ウチのガヤがすみません! (752)NTV実況
カンナさーん 最終回★2 (923)TBS実況
有吉弘行のダレトク!?★3 (929)フジ実況
報道ステ−ション★2 (976)テレ朝実況
キスマイレージ (450)テレ朝実況
このスレッドが人気です(ニュース系)
【国連】トランプ大統領、国連総会演説で北朝鮮の日本人拉致を非難 「13歳の少女を拉致した」★2 (1001)ニュー速+
【国際】トランプ大統領、北朝鮮について「完全に破壊するしかないだろう、ロケットマンは自殺行為をしている」 (1001)ニュー速+
【国際】トランプ大統領、北朝鮮について「完全に破壊するしかないだろう、ロケットマンは自殺行為をしている」★2 (395)ニュー速+
トランプ大統領「北朝鮮は工作員の日本語教師として強制的に働かせるために13歳の日本人の女の子を拉致したことをわれわれは知っている (1001)ニュー速+
【国連】トランプ大統領、国連総会演説で北朝鮮の日本人拉致を非難 「13歳の少女を拉致した」★3 (127)ニュー速+
【話題】<ひろゆき>水原希子の騒動の誤りを指摘!言ってないことを言ったことにする頭の残念な人達 ★3 (855)音楽・芸能ニュース
【調査】安倍内閣支持率、軒並み回復 各社世論調査で上昇、「危険水域」脱出 「10、20代(男性)」の支持率は69.0% (1001)ニュー速+
【衆院選】安倍首相、解散の大義急造 「消費税増税で教育・社会保障」★13 (801)ニュー速+
データベース板の人気スレ
SQL質疑応答スレ 17問目 (574)
PostgreSQL Part.11 (397)
Oracle 質問総合スレ9 (986)
MySQL 総合 Part24 (1010)
MySQL 総合 Part26 (50)
Oracle 質問総合スレ10 (1014)
SQL質疑応答スレ 15問目 (1013)
Microsoft SQL Server 総合スレ 11 (468)
♪つっかもうぜ!DB! (116)
【論理ファイル】AS400DB【キューリー】 (262)
はじまりです。 (585)
XML統合スレッド (397)
だれかみずほ銀行のDBを直してやれよ (54)
この板が生き残るために (58)
新しい板の名前を決めるスレ (63)
SQLite Part.10 (630)
RDBMS比較総合スレ 【サーバ】 (131)
OODB - オブジェクト指向データベース (302)
   D       B         (138)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
広告


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


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