板検索:
SQL質疑応答スレ 17問目 (942)
まとめビュー
1
NAME IS NULL[sage]   投稿日:2016/07/10 22:29:01  ID:???.net(701)
このスレは
「こういうことをやりたいんだけど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(701)

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

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

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

よくある質問5

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

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

   20100601
   20100602
    ・
    ・
    ・
   20100630

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

複数joinすれば?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>>もしかして

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

179
NAME IS NULL[sage]   投稿日:2017/04/26 20:40:34  ID:???.net(701)
・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(701)
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(701)
(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(701)
IIf(Month<4,Year-1,Year) AS 会計年度
見たいなカラム持ったクエリ定義しとけよ

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

まあ、わかるだろ

185
NAME IS NULL[sage]   投稿日:2017/04/27 04:56:49  ID:???.net(701)
>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(701)
>182
自分もこれだな

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

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

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

190
NAME IS NULL[sage]   投稿日:2017/04/27 12:24:41  ID:???.net(701)
どうでもいいけど言うならせめて糞設計だよね
実装て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(701)
質問者への回答と、設計の改善提案は別だろうに

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

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

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

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

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

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

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

198
NAME IS NULL[sage]   投稿日:2017/04/27 19:31:38  ID:???.net(701)
>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(701)
バカが現れた

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

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

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

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

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

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

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

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

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

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

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

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

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

214
NAME IS NULL[sage]   投稿日:2017/04/30 03:36:41  ID:???.net(701)
>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(701)
3年分取ってきてと言われて初めて問題に気付くパターンや

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

232
NAME IS NULL[sage]   投稿日:2017/05/01 16:57:59  ID:???.net(701)
>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(701)
つか、いたるところで会計年度を意識するようなシステムなら、会計年度カラムを作っとけばいいよな
コメント1件

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

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

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

236
NAME IS NULL[sage]   投稿日:2017/05/01 18:28:00  ID:???.net(701)
>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(701)
ストアド最強!!!|バカの壁| SQL92以降

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

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

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

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

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

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

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

243
NAME IS NULL[sage]   投稿日:2017/05/01 21:25:30  ID:???.net(701)
>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(701)
>240
分解せずに日付型で持っていればよかったって事だな
以降>188へ戻る

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

282
NAME IS NULL[sage]   投稿日:2017/05/03 17:47:31  ID:???.net(701)
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(701)
使われないDBがあると思ってるのは約1名だけだぞ

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

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

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

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

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

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

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

292
NAME IS NULL[sage]   投稿日:2017/05/03 20:49:46  ID:???.net(701)
>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(701)
>288
「使う場合もある」に方向転換w

295
NAME IS NULL[sage]   投稿日:2017/05/03 22:14:57  ID:???.net(701)
>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(701)
結論

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

307
NAME IS NULL[sage]   投稿日:2017/05/04 13:46:35  ID:???.net(701)
>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(701)
脇道の細かい議論しても仕方がないから、論点を絞ろう。

君が主張したいのはこれか?
>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(701)
>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(701)
>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(701)
なんでBit Map Index Scanになるのが当然のような言い方なんだか。
コメント1件

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

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

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

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

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

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

318
NAME IS NULL[sage]   投稿日:2017/05/09 13:37:10  ID:???.net(701)
>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(701)
ケースバイケース

320
NAME IS NULL[sage]   投稿日:2017/05/09 13:48:27  ID:???.net(701)
>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(701)
親切なので、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(701)
さらにおまけ。

# \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(701)
これにもレスしとこう。

前提として、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(701)

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

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

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

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

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

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

330
NAME IS NULL[sage]   投稿日:2017/05/10 18:21:15  ID:???.net(701)
>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(701)
>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(701)
複数レコードが存在するレコードを削除すればよい、ではなくてか。
having count(*) = 1 みたいに。

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

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(701)
まとめると
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(701)
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(701)
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(701)
>341
それでいい
コメント1件

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

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

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

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

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

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

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

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

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(701)
【テンプレ】
・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(701)
>350
SQLが通るかどうかは置いといて、結果の並び順は保証されていないので
キーを使うなどしないと「たまたま」動作したということになると思います。
コメント1件

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

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

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

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

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

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

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

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

360
NAME IS NULL[sage]   投稿日:2017/07/16 03:19:50  ID:???.net(701)
初めて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(701)
straceしてみてどの設定ファイル読んでるか確認してみたら?

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

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(701)
どの話をしようとしているのか分からん

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

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

なんにせよありがとう

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

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

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

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

370
NAME IS NULL[sage]   投稿日:2017/07/23 16:58:56  ID:???.net(701)
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(701)
>371
その翌月の日が1日だったらな
コメント2件

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

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

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

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

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

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

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

380
NAME IS NULL[sage]   投稿日:2017/07/24 00:34:13  ID:???.net(701)
複数の同一形式の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(701)
・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(701)
>381
tableA は
日付、名前、国語、英語
です。

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

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

386
NAME IS NULL[sage]   投稿日:2017/07/27 21:34:59  ID:???.net(701)
>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(701)
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(701)
他人にわかる説明ができるようになったら解決するんじゃないかな。

390
NAME IS NULL[sage]   投稿日:2017/07/27 22:56:18  ID:???.net(701)
>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(701)
SQLだけで書けないと思ったのにSQLスレなのか
DBだけでやれない想定として、どういう風に実装予定なの?
ざっくりでいいからさ(Java使って、とかWindows上でとか)

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

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

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

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

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

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

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

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

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

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

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

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

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(701)
>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(701)
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(701)
共有はいいけど公開はダメってだけでしょ

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

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(701)
>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(701)
低いレベルというか専門性が違うだけでしょ
SQLスレで聞くのも違う気がするし

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

414
NAME IS NULL[sage]   投稿日:2017/07/29 02:02:41  ID:???.net(701)
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(701)
初心者てレベル争い好きだなw

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

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

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

419
NAME IS NULL[sage]   投稿日:2017/07/30 00:24:21  ID:???.net(701)
>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(701)
PostgreSQLでいうと、port 5432をインターネットに公開したいってことでしょ

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

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

424
NAME IS NULL[sage]   投稿日:2017/07/31 00:05:16  ID:???.net(701)
ここのスレは>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(701)
ネーミングの問題?自分で作ってるものなんだろうけど、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(701)
作った当初は覚えているだろうけど
何年か経って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(701)
>428
そうでもない

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

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

434
NAME IS NULL[sage]   投稿日:2017/08/04 00:27:50  ID:???.net(701)
デフォルトは主キーが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(701)
どんなテーブルだろうが id は id やろ?
テーブル見ればなんの id か分かるだろ?
アホはアホなとこに神経使うんだな(笑)

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

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

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

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

443
NAME IS NULL[sage]   投稿日:2017/08/04 17:32:23  ID:???.net(701)
>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(701)
>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(701)
あのさぁ、1プロジェクトで数百以上のテーブルとか普通にあるんだけど、それぞれユニークなカラム名付けるのか?

448
NAME IS NULL[sage]   投稿日:2017/08/04 19:02:00  ID:???.net(701)
>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(701)
>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(701)
>449
ソース

453
NAME IS NULL[sage]   投稿日:2017/08/04 19:59:47  ID:???.net(701)
>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(701)
>442
て言うか単一テーブルだけでないなら普通そうするよね

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

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

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

460
NAME IS NULL[sage]   投稿日:2017/08/05 01:35:30  ID:???.net(701)
すみません、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(701)
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(701)
いや、必要な知識だと思うが。
コメント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(701)
サブクエリも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(701)
その「あたりまえ」は>462の知識を前提にしているんだから順序はそれでいいんだよ。何をすっとばしたって?
それにそもそも、>460がそのあたりまえのことを理解できない初心者だと決めつけるのもおかしいだろう。

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

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

470
465[sage]   投稿日:2017/08/05 11:06:11  ID:???.net(701)
すみません。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(701)
概念的には各サブクエリは独立して実行されると考えてよいが、
それを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(701)
日本語下手な奴は迷惑

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

476
NAME IS NULL[sage]   投稿日:2017/08/10 17:31:03  ID:???.net(701)
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(701)
インジェクション扱いされて
SQL文、書き込めない。

478
NAME IS NULL[sage]   投稿日:2017/08/10 20:27:07  ID:???.net(701)
>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(701)
>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(701)
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(701)
IDEなんかに出てくるフォルダがスキーマってやつだよね?
でテーブルがあると
スキーマとテーブルの間のフォルダみたいな奴はなんなの?
コメント1件

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

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

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

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

490
NAME IS NULL[sage]   投稿日:2017/08/25 17:47:25  ID:???.net(701)
>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(701)
>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(701)
WITHなら分かるけどWithは分からないにゃあ
コメント2件

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

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

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

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

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

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

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

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

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

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

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

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

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(701)
>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(701)
>508
違うわw
質問に群がる教えたがりのバカを笑ってるだけだw
お前みたいなバカなw

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

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

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

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

514
NAME IS NULL[sage]   投稿日:2017/08/26 19:51:42  ID:???.net(701)
>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(701)
いつものクズがVBAスレから出張してきててワロタwww

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

524
NAME IS NULL[sage]   投稿日:2017/08/27 08:24:00  ID:???.net(701)
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(701)
そうやって甘やかすから図に乗るんだよ

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

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

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

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

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

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

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

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(701)
LEFT OUTER JOINの話かな?
どっちにしろ、そんな方法はない
IFNULLで地道に埋めるしかない
コメント1件

536
NAME IS NULL[sage]   投稿日:2017/09/02 18:24:43  ID:???.net(701)
>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(701)
ソース全部手で打ち込んでいるのか?
環境が分からないけど、
大概のエディタって置換機能あるだろう

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

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

541
NAME IS NULL[sage]   投稿日:2017/09/02 21:09:40  ID:???.net(701)
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(701)
「かなりある」とか言ってても実際は大したことない

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

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

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

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

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

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

548
NAME IS NULL[sage]   投稿日:2017/09/03 08:08:16  ID:???.net(701)
>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(701)
>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(701)
計算機科学者と宇宙飛行士ってどっちの方が頭いい?
コメント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(701)
自分は生まれつきもの凄く頭が悪いのですが、東京大学理学部数学科に入って数学を学びたいという目標があります。
生まれつきもの凄く頭が悪い人でも、人並み外れた努力を積み重ねれば、その目標を実現することはできると思いますか?
どうでしょうか?
コメント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(701)
ネカフェで三田紀房の ドラゴン桜 でも読んどけ

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(701)
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(701)
>558
http://sqlfiddle.com/#!9/e022aa/1

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

561
NAME IS NULL[sage]   投稿日:2017/09/12 15:55:17  ID:???.net(701)
各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(701)
そうっすね

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

565
NAME IS NULL[sage]   投稿日:2017/09/13 12:19:17  ID:???.net(701)
意味論て言ってるのにデータを見ただけで分かるわけないだろ
頭が悪い奴だな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(701)
うん、関数従属性はデータからだけじゃわからないよ

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

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

569
NAME IS NULL[sage]   投稿日:2017/09/13 20:53:13  ID:???.net(701)
>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(701)
3番目のカラムを除く組み合わせほぼ全てだろ?
Aならばタコスだし2017/08/13だし、ドンタコスならばBだし12だ。

571
NAME IS NULL[sage]   投稿日:2017/09/14 19:05:36  ID:???.net(701)
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(701)
>572
適切なスレに誘導してくれよw

574
NAME IS NULL[sage]   投稿日:2017/09/14 19:53:49  ID:???.net(701)
BigQuery ってなんだ?
ってググったら Google のサービスか
何を聞きたいのか知らんけど普通に Google に聞けよ

575
NAME IS NULL[sage]   投稿日:2017/09/21 06:08:31  ID:???.net(701)
MYSQLで
まったく同じ構造の表三つを、

表1    表2   表3
1     null   1
2     2     null
3     3     3
null    4     null
5     null    5
nul    6     6

のように結合したいのですが、どのようなSQLにすればよいのでしょうか
表は三つあるのですが、どこがデータ量が一番多いのかはわかりません
コメント1件

576
NAME IS NULL[sage]   投稿日:2017/09/21 06:28:30  ID:???.net(701)
>575
FULL OUTER JOIN

577
NAME IS NULL[sage]   投稿日:2017/09/22 14:44:50  ID:???.net(701)
テーブルレイアウトも結合条件も解らんのだが

578
NAME IS NULL[]   投稿日:2017/09/22 15:23:28  ID:ztnwHSNR.net
推測するに各テーブルがカラム1個で、
全データを列挙したいんじゃ?

579
NAME IS NULL[sage]   投稿日:2017/09/22 19:55:55  ID:???.net(701)
つまり、こういうことか?
select 表1.カラム1,表2.カラム1,表3.カラム1
from
(select カラム1 from 表1
union
select カラム1 from 表2
union
select カラム1 from 表3) t
left join 表1 on 表1.カラム1= t.カラム1
left join 表2 on 表2.カラム1= t.カラム1
left join 表3 on 表3.カラム1= t.カラム1

580
NAME IS NULL[sage]   投稿日:2017/09/27 21:42:06  ID:???.net(701)
SQL Server 2014 で教えてください。

1)
select * from tableA join tableB;

select * from tableA left join tableB;
と書いた場合、上は inner join、下は left outer join と同等でしょうか。
引き継いだコードが上のように書いてあるのですが、join で検索を掛けても inner join とかの記事しか出てこず。

2)
テーブルから特定の値のレコードを検索する場合、
a) 検索したい値を格納した(一時)テーブルと結合する
 select * from tableA t1 inner join tableB t2 on t1.id = t2.id; など /* tableB に欲しいレコードの id を格納しているとします */
b) where で in を使用して検索したい値を列挙する
 select * from tableA t1 where id in (/* 欲しいレコードの id を列挙 */)
などの方法があるように思います。

a と b の実行時間を計ると b の方が圧倒的に速いのですが、そういうものなのでしょうか。
コメント1件

581
NAME IS NULL[sage]   投稿日:2017/09/27 22:06:04  ID:???.net(701)
>580
1) JOINだけならINNER JOIN、LEFT JOINはLEFT OUTER JOIN
下のページでjoin_typeを参照して
https://docs.microsoft.com/en-us/sql/t-sql/queries/from-transact-sql

2) 状況による
explainして実行計画を比較するのが一番
(参考)https://stackoverflow.com/a/1200337
コメント1件

582
580[sage]   投稿日:2017/09/28 21:07:29  ID:???.net(701)
>581
ありがとう。

1) は動作結果からそう考えていたのですが、仕様的確認をとれて助かりました。
2) はそうですよね。SSMS の実行計画は見ていたのですが、そういう差があること以上のことは分かりませんでした。
教えていただいた方法でも調べてみます。

583
NAME IS NULL[sage]   投稿日:2017/10/10 07:06:25  ID:???.net(701)
サブクエリでのORDER BYが、メインクエリでも有効なのかどうか、
ご存知の方教えていただけないでしょうか。

例えば、学生別点数テーブルから点数上位10名を取得したい場合、

SELECT
*,
ROWNUM as num
FROM (
SELECT *
FROM 学生別点数テーブル
ORDER BY 点数 DESC
)
WHERE num <= 10;

というソースだと、
サブクエリでは学生別点数テーブルが点数の降順でソートされるはずですが、
メインクエリでROWNUMが各レコードに通番(num)を振る際にもその並びが保持されているのか。

「サブクエリの並び順って、メインクエリでは保持されないんじゃなかったか?」と質問を受け、
回答に困っている状態です。
oracle 11gのリファレンスには、ROWNUMを利用した上記SQLで、点数上位10名が取得可能と読み取れます。
「ORDER BY句を副問合せに埋め込んでROWNUM条件をトップレベル問合せに置いた場合、行の順序付けの後でROWNUM条件を強制的に適用させることができます。たとえば、次の問合せは、小さい順に10個の従業員番号を持つ従業員を戻します。」
https://docs.oracle.com/cd/E16338_01/server.112/b56299/pseudocolumns0...

別の箇所で質問させてもらった際は、
「サブクエリーでソートされた結果を出力するだけ(joinやwhere条件など索引に関係するものが無ければ)なら、並びを変更される要因がないので、同じ結果となる」
との回答をもらっていますが、
もしよろしければこちらの有識者の方のご意見も頂けると幸いです。

よろしくお願い致します。
コメント5件

584
NAME IS NULL[sage]   投稿日:2017/10/10 07:43:42  ID:???.net(701)
その回答した人は、ROWNUMがOracle固有の疑似列だということを知らなかったんじゃないかね。
ちゃんとそれがわかるように質問した?
あとOracleの場合でも、順序はROWNUMで得られるけれども出現順が保持されるとは言っていないと思う。
コメント1件

585
NAME IS NULL[sage]   投稿日:2017/10/10 08:19:14  ID:???.net(701)
>583
保証されないって思っておいた方がいいと思う

> たとえば、次の問合せは、小さい順に10個の従業員番号を持つ従業員を戻します。
これは
「小さい順に10個の従業員番号を持つ従業員」を戻します
であって
小さい順に「10個の従業員番号を持つ従業員」を戻します
じゃない

> 「サブクエリーでソートされた結果を出力するだけ(joinやwhere条件など索引に関係するものが無ければ)なら、並びを変更される要因がないので、同じ結果となる」
これOracleサポートの正式回答ならとりあえずは信じていいと思うけど、バージョン変わった時も保証されるのかを聞いておいた方がいいと思う

そもそも普通に
order by num asc
を追加しとけばいいだけじゃないの?

586
NAME IS NULL[]   投稿日:2017/10/10 08:36:52  ID:oX0yCwR9.net(12)
でたらめアドバイスだらけだが、OracleのFROM句の副問い合わせは、インラインビューと呼ばれ、並び替えも含めてインラインビューの結果そのものを、再度、検索する。

rownomをSELECT句に書いて、別名を付けるのは一般的ではない。
コメント2件

587
583[sage]   投稿日:2017/10/10 09:25:30  ID:???.net(701)
>584,585
ご回答ありがとうございます。
別場所で質問した際は、oracle11gで、と前置きしていましたが、回答者の方がoracle固有の疑似列と知ってらっしゃったかは分かりません…

お二人に指摘頂いてるリファレンスの解釈については、確かにそのとおりですね。
公式の見解を聞きたいですが、サポート契約が無いのが辛いorz

588
583[sage]   投稿日:2017/10/10 09:29:46  ID:???.net(701)
>586の方もご指摘ありがとうございます。

確かに、リファレンスにもROWNUMにasで別名を付けるソースではないんですよね…
ただ、既に稼働しているシステムのソースがROWNUM別名形式でして、弄くる箇所は最小限にしたいなあ、と。
コメント1件

589
NAME IS NULL[]   投稿日:2017/10/10 09:48:36  ID:oX0yCwR9.net(12)
>588
そもそもrownumをSELECT句に挙げる慣習はOracleにはない。

最近、SELECT句で選択していない項目は条件で使えないと思っていたベテランがいたがw

590
NAME IS NULL[sage]   投稿日:2017/10/10 12:27:45  ID:???.net(701)
何でrow_number関数使わないのか
コメント1件

591
NAME IS NULL[sage]   投稿日:2017/10/10 13:02:37  ID:???.net(701)
既に稼働しているシステムのソースをなるべく弄らない方針にすると
負債がどんどん貯まっていって見るのも嫌になるのでおすすめ

592
NAME IS NULL[]   投稿日:2017/10/10 15:19:43  ID:mDt5cW24.net(6)
>583
外側のクエリでサブクエリの並び順を変更する要素がなければ、サブクエリの並び順のまま出力されるけど、それは現状の実装がそうなってるだけ

外側にもサブクエリと同じorder byを付けとけばオプティマイザが2回目のソートは不要って判断してくれるから心配なら付けといて損はない
コメント2件

593
NAME IS NULL[]   投稿日:2017/10/10 16:01:13  ID:mDt5cW24.net(6)

594
NAME IS NULL[]   投稿日:2017/10/10 16:50:27  ID:oX0yCwR9.net(12)
>592
それはおかしい。
間違いは素直に認めろ。

595
NAME IS NULL[]   投稿日:2017/10/10 16:51:41  ID:oX0yCwR9.net(12)
インラインビューをサブクエリとわざわざ曖昧にしてるあたり分かっているとは思えない。

596
NAME IS NULL[]   投稿日:2017/10/10 16:55:22  ID:oX0yCwR9.net(12)
>590
row_numberは記述が冗長になるのと、機能を拡張しすぎていてかえって分かりにくくなってしまう。
コメント1件

597
NAME IS NULL[]   投稿日:2017/10/10 17:00:42  ID:oX0yCwR9.net(12)
>592
あなたはrownumはフェッチ時に番号が振られるのを理解してないのだと思う。

番号を付けるときにorder by rownumしても何の意味もない。
コメント1件

598
NAME IS NULL[]   投稿日:2017/10/10 17:11:36  ID:mDt5cW24.net(6)
>597
アウターにorder byがなくてもオラクルが順序を保証してくれると主張してるの?
最低限、何を主張したいのか分かるように書いてくれる?
コメント1件

599
NAME IS NULL[sage]   投稿日:2017/10/10 17:13:18  ID:???.net(701)
>596
Oracle方言よりANSI SQL使うに越したことはない

600
NAME IS NULL[]   投稿日:2017/10/10 17:27:02  ID:oX0yCwR9.net(12)
>598
rownumという列があるわけではない。

並び順はorder byを指定しないかぎりは保証しないというSQLの規格とは関係ない。

Oracleは内部的なことをSQLに書いているだけで、SQL ServerのTOP関数も内部では二度SELECTしていることが多い。
コメント1件

601
NAME IS NULL[]   投稿日:2017/10/10 18:06:03  ID:mDt5cW24.net(6)
>600
で?
保証してくれるの?してくれないの?

602
NAME IS NULL[]   投稿日:2017/10/10 18:54:06  ID:oX0yCwR9.net(12)
rownum絡みの仕様変更はずっとアナウンスされていない。

603
NAME IS NULL[sage]   投稿日:2017/10/10 19:16:30  ID:???.net(701)
Qに対してのAが帰ってこないとはこの事だ

604
NAME IS NULL[sage]   投稿日:2017/10/10 20:57:29  ID:???.net(701)
order byがなければ順序は保証しないとマニュアルに明記されているにも関わらず
rownum使ったtop-N最適化のケースは例外的に順序が保証されると言うならその根拠が必要だよね
コメント2件

605
NAME IS NULL[]   投稿日:2017/10/10 21:07:48  ID:oX0yCwR9.net(12)
どういう思い込みなのか、rownumの変な使い方にこだわって、やってもかまわないが、変な人を貫きたいというので答えたのにな。

さらにオラクル社のいうこと、伝統、実装も突っぱねて、さらにオラクルでは、リソース食いのrow_numberを使用しようともしている。

どのRDBMSも標準化SQLが先にあって作られているわけではないから、標準SQLの方が性能も動きも読めないうえに、バグにあたる可能性がある。

さらに標準化SQLの構文を拡張してるから、どんどんわかりにくくなる。

なんで調べないのかな。

rownumは列じゃないんだよ。
インラインビューのorder byは意味があり、入れ子のrownum同士は別物。

オラクルではインラインビューのorder byは意味があり、インラインビューをSELECTするSQLではrownumをorder byをするのはかまわないが滑稽。

使い方は自由だからそう書きたいならそう書けばよい。

606
NAME IS NULL[sage]   投稿日:2017/10/10 21:14:58  ID:???.net(701)
こいつは誰と戦ってるんだ?

607
NAME IS NULL[]   投稿日:2017/10/10 21:16:41  ID:oX0yCwR9.net(12)
>604
どういう初心者なのか知らないが、ソートしたものの中から、初めの何件かを取得するというSELECT文は、Oracle Databaseではインラインビューでソートしてrownumで絞り込む構文になっているだけ。

他のRDBMSでもOracleと同じものもあれば、ひとつのSELECT文で表現するものもある。

SQLの見た目で判断しているようでは、データベースをやめた方がいいよ。

どうしてソートしてないのに先頭何件かが取れるのか考えろよw

608
NAME IS NULL[]   投稿日:2017/10/10 21:26:57  ID:xk7c94Oj.net
諦めろお前らはとっくに ID:oX0yCwR9 にマウント取られてんだよw

609
NAME IS NULL[]   投稿日:2017/10/10 21:31:29  ID:oX0yCwR9.net(12)
なぜ定石を無視する質問をするのかがわからない。

610
NAME IS NULL[]   投稿日:2017/10/10 21:39:40  ID:oX0yCwR9.net(12)
>604
Oracle Databaseは保証しないことは書いてあっても、保証するとは明言していないのが特徴。

こんな実績があって有名な話題で、さらにorder byを特殊なOracle構文にも摘要させたがるのは、世界初のリレーショナルデータベースのオラクルが憎くて、標準SQL側の攻撃のようだw
コメント1件

611
NAME IS NULL[]   投稿日:2017/10/10 21:41:16  ID:mDt5cW24.net(6)
内部実装についていくら書いても
オラクルが順序を保証する根拠にならないよ
ただの無意味な長文

612
NAME IS NULL[]   投稿日:2017/10/10 21:46:43  ID:mDt5cW24.net(6)
>610
じゃ、保証してないんでしょ?
保証してんの?

613
NAME IS NULL[sage]   投稿日:2017/10/11 01:21:18  ID:???.net(701)
>586
一般的な書き方かどうかはどうでもいいけど
>並び替えも含めてインラインビューの結果そのものを、再度、検索する。
のソース教えてくれ
とくに、並び替えも含めてってとこな

これが正確で保障された動作なら、ORACLEにおいては保障されてるって話になるな
コメント1件

614
NAME IS NULL[sage]   投稿日:2017/10/11 02:07:19  ID:???.net(701)
>613
なんねーよw
再度検索した後の結果セットの並び順が
その理屈でなんで保証されるんだよ
コメント1件

615
NAME IS NULL[]   投稿日:2017/10/11 05:03:11  ID:f/rcAUbh.net(19)
Oracle初心者が調べもせずに教えろと騒ぐスレになったのか。

616
NAME IS NULL[]   投稿日:2017/10/11 05:13:51  ID:f/rcAUbh.net(19)
例の目的を達するにはこう書くと決まっているのに。rownumは値が固定のカラムではないと何度言ったらわかるのかw
コメント1件

617
NAME IS NULL[sage]   投稿日:2017/10/11 05:51:58  ID:???.net(701)
>614
保障されないならrownumでトップnとか取れないって事になるぞ
あれは単に行のフェッチ順のはずだから
でも実際にはあちこちでORACLEのトップnのクエリの例としてあがってるからな

>616
理屈も解らずにただこう書くと言われても納得できない方が普通じゃないかね
コメント1件

618
NAME IS NULL[sage]   投稿日:2017/10/11 08:32:45  ID:???.net(701)
ここまできたらソース出した方がいいぜ

619
NAME IS NULL[]   投稿日:2017/10/11 11:11:27  ID:f/rcAUbh.net(19)
だから保証されていることを保証しているのかとアホみたいに聞くからおかしなことになる。

オラクルはインラインビューにあとからorder byを導入して、レコードの並び順を固定している。

だからインラインビューをSELECTする場合にはorder byがいらない。

だいたいマニュアルでも書籍でもネット上でもさんざん説明されているのに、オラクルスレでもないここで聞いている行為がおかしい。
コメント2件

620
NAME IS NULL[sage]   投稿日:2017/10/11 11:15:12  ID:???.net(701)
Oracleスレでやれよ
ここSQL全般スレなんだから方言とか実装の話なんかいらん

621
NAME IS NULL[sage]   投稿日:2017/10/11 11:58:54  ID:???.net(701)
>617
top-Nを取得することと、取得した結果セットの並び順がどうなるかは別の問題だってのが分からない?

622
NAME IS NULL[sage]   投稿日:2017/10/11 11:59:35  ID:???.net(701)
下のが質問者が引用してたリファレンス原文だけど結果セットの並び順については何も言及されてない
the 10 smallest employee numbersがreturnされると書いてるだけ

For example, the following query returns the employees with the 10 smallest employee numbers.
This is sometimes referred to as top-N reporting:
https://docs.oracle.com/cloud/latest/db112/SQLRF/pseudocolumns009.htm#SQLRF00255

623
NAME IS NULL[sage]   投稿日:2017/10/11 12:02:40  ID:???.net(701)
でもって>593リンクの中に並び順が保証されてるわけじゃないと書いてある

so, while I cannot imagine
select rownum, x.* from (select ... order by ... ) x
not being sorted by rownum (by the order by), it is permitted to not be sorted.

... Why would it be permitted not to be sorted? ...
because there is no order by on the outer query. that is why.

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1137...
コメント1件

624
NAME IS NULL[sage]   投稿日:2017/10/11 12:04:27  ID:???.net(701)
>619
保証されてるというソースがあればみんな納得するよ

625
NAME IS NULL[sage]   投稿日:2017/10/11 12:53:06  ID:???.net(701)
>619
> だからインラインビューをSELECTする場合にはorder byがいらない。
> だいたいマニュアルでも書籍でもネット上でもさんざん説明されている
ネットや書籍はどうでもいいからどのマニュアルのどこに載ってるか示してくれ
コメント1件

626
NAME IS NULL[]   投稿日:2017/10/11 17:03:54  ID:f/rcAUbh.net(19)
>625
マニュアルは外国に丸投げしたせいか、劣化が激しく、間違いや変な説明が多いので、マニュアルが正ともかぎらないし、あえて言及してないことも多い。

627
NAME IS NULL[]   投稿日:2017/10/11 17:07:38  ID:f/rcAUbh.net(19)
https://docs.oracle.com/cd/E16338_01/server.112/b56299/pseudocolumns0...

「SELECT * FROM (SELECT * FROM employees ORDER BY employee_id) WHERE ROWNUM < 11;

前述の例では、ROWNUM値はトップレベルのSELECT文の値です。これらの値は、副問合せ内のemployee_idによって行が順序付けられた後で生成されます。」
コメント1件

628
NAME IS NULL[sage]   投稿日:2017/10/11 17:12:40  ID:???.net(701)
そのトップレベルのSELECTの結果の出力順が
インラインのORDER BYの順序と同一であることが
保証されてるかどうかって話じゃなかったの?知らんけど。
コメント1件

629
NAME IS NULL[]   投稿日:2017/10/11 17:13:49  ID:f/rcAUbh.net(19)
「ORDER&#160;BY句を副問合せに埋め込んでROWNUM条件をトップレベル問合せに置いた場合、行の順序付けの後でROWNUM条件を強制的に適用させることができます。
たとえば、次の問合せは、小さい順に10個の従業員番号を持つ従業員を戻します。
これは、上位N番のレポートと呼ばれることがあります。


SELECT * FROM
(SELECT * FROM employees ORDER BY employee_id)
WHERE ROWNUM < 11;

前述の例では、ROWNUM値はトップレベルのSELECT文の値です。
これらの値は、副問合せ内のemployee_idによって行が順序付けられた後で生成されます。」

630
NAME IS NULL[]   投稿日:2017/10/11 17:18:12  ID:f/rcAUbh.net(19)
>628
rownumは主問い合わせの列で、その値は副問い合わせの結果と書いてある。

これを根底からくつがえすなら、あらゆるシステムで問題になっている。

これは内部的にソートされるから結果的に並び順が同じたぐいの話ではない。

631
NAME IS NULL[sage]   投稿日:2017/10/11 17:19:14  ID:???.net(701)
うんだからROWNUMの値がインラインのORDER BYに紐付いてるのはわかったよ
そのROWNUM < 11なトップレベルの問合せはROWNUM順になるのが保証されてるのか
ってのが上の人らの指摘なんじゃないの?
個人的には保証されてるかどうかはどうでもいいんだけどズレた内容でドヤ顔されるのはうざいし
コメント1件

632
NAME IS NULL[]   投稿日:2017/10/11 17:26:17  ID:f/rcAUbh.net(19)
インラインビューのorder byは無視されているのではなくて、order byの結果セットを返す仕様で、rownumは結果セットのフェッチ順。

構文が気持ち悪くみえる初心者がいるのは理解できるが、SQL ServerのTOPの方がよほど気持ち悪い。

レコードに位置の概念があったり、位置の概念がないと思いながらもソートがいきなりできると思い込むITオンチと話すときりがない。

633
NAME IS NULL[sage]   投稿日:2017/10/11 17:28:00  ID:???.net(701)
誰でも知ってることをドヤ顔で永遠と書いた挙句に最後は八つ当たりww
コメント1件

634
NAME IS NULL[]   投稿日:2017/10/11 17:29:56  ID:f/rcAUbh.net(19)
>631
それは構文がそう見えるだけだろうが。

rownumの値は副問い合わせの結果で、かつrownumは主問い合わせの取得順。

Oracleの構文になんでそんなに文句があるのか。

外国人はデタラメが多いから気をつけろよ。

635
NAME IS NULL[]   投稿日:2017/10/11 17:31:15  ID:f/rcAUbh.net(19)
>633
どうもスルー力がないようですね。

636
NAME IS NULL[sage]   投稿日:2017/10/11 17:33:11  ID:???.net(701)
構文にじゃなくてお前に文句があるだけでは

637
NAME IS NULL[]   投稿日:2017/10/11 17:36:44  ID:f/rcAUbh.net(19)
実際にこの話題は仕事でも若い人ほど、標準SQLが先にあって、OracleがそのSQLの仕様に沿って作られていると勘違いしているのか、引っかかって面倒なんだよな。

最近もSQLはこう書くとこうなるみたいな話をデータベースに詳しくない人間が言い始めると、面倒だからそれに従うしかない。

638
NAME IS NULL[]   投稿日:2017/10/11 17:38:22  ID:f/rcAUbh.net(19)
批判されていると思い込む恐怖心はわかるが、ネットとはこういうところです。

639
NAME IS NULL[sage]   投稿日:2017/10/11 17:47:01  ID:???.net(701)
批判されてるのもお前では

640
NAME IS NULL[sage]   投稿日:2017/10/11 18:02:51  ID:???.net(701)
>rownumは主問い合わせの取得順
これは間違いないんだが、その肝心の主問い合わせの取得順が
副問い合わせのORDER BY順にならなければトップn取れないわけだが
(最終的な出力順はその通りとは限らんでも良いけど)

これがORACLEでは保障されてるってなら
マニュアルのどこに書いてあるか言えばいいだけなんだがな

ORACLEには仕様ではないが過去の実装からそうだと決めつけられてることが結構あって
ORACLE自身も影響範囲がでかすぎて、おいそれと変更ができなくなってる
これもその一つだと思うけどね
コメント2件

641
NAME IS NULL[sage]   投稿日:2017/10/11 18:12:59  ID:???.net(701)
やりとり見てないまま横から失礼だが
普通は row_number() over 〜 使うんじゃないの
コメント1件

642
NAME IS NULL[sage]   投稿日:2017/10/11 18:18:20  ID:???.net(701)
>640
top-N集合の取得は保証されてるよ
それはリファレンスのrownumのところ読めばわかるじゃん

643
NAME IS NULL[sage]   投稿日:2017/10/11 18:48:25  ID:???.net(701)
>641
そうね
今はfetch first/next使う

644
NAME IS NULL[sage]   投稿日:2017/10/11 19:56:15  ID:???.net(701)
どうでも良いからOracleのスレでやれって アフォどもが

645
NAME IS NULL[]   投稿日:2017/10/11 21:34:43  ID:f/rcAUbh.net(19)
ソート条件のあるカーソルでフェッチ順がソート条件通りにならないという主張はただの知識不足としか思えない。
コメント2件

646
NAME IS NULL[]   投稿日:2017/10/11 21:40:14  ID:f/rcAUbh.net(19)
>640
なんでオラクル社の説明をねじ曲げて解釈するのか?

例のrownumの件は、ドキュメントでも主問い合わせのrownumは、副問い合わせの結果が値で、主問い合わせの疑似列であると説明している。
コメント2件

647
NAME IS NULL[]   投稿日:2017/10/11 21:40:16  ID:9hHhkBSp.net(3)
>645
もうやめたら?言えば言うだけバカがよけいにムキになるだけだぞw
コメント1件

648
NAME IS NULL[]   投稿日:2017/10/11 21:42:53  ID:f/rcAUbh.net(19)
>647
SQLは仕事上、間違いを主張しまくる人間が多いから、ここでもとにかく誤りを正さないと生活がめちゃめちゃになる。

649
NAME IS NULL[sage]   投稿日:2017/10/11 21:51:37  ID:???.net(701)
>646

>623でオラクルのエンジニアが並び順は保証されてないとハッキリ言ってるじゃん
彼が間違ってて君が正しいと言える客観的根拠が全く提示されないから説得力ゼロ
今のところ”ソースは俺の頭の中(キリッ”な状態
コメント1件

650
NAME IS NULL[sage]   投稿日:2017/10/11 21:53:42  ID:???.net(701)
>645
君以外誰一人としてカーソルのフェッチについての話なんてしてないよ
コメント1件

651
NAME IS NULL[]   投稿日:2017/10/11 22:03:53  ID:9hHhkBSp.net(3)
ああなるほど、いかにもバカらしい勘違いだなw

652
NAME IS NULL[sage]   投稿日:2017/10/11 22:21:29  ID:???.net(701)
典型的な老害

653
NAME IS NULL[]   投稿日:2017/10/11 22:25:26  ID:f/rcAUbh.net(19)
>650
SQLが何なのかわかってない。いい加減にしろ。

654
NAME IS NULL[]   投稿日:2017/10/11 22:27:41  ID:f/rcAUbh.net(19)
>649
その人が間違ってるのに、なぜオラクルエンジニアの私が間違ってると決めつけられなきゃいけないのか?
コメント1件

655
NAME IS NULL[sage]   投稿日:2017/10/11 22:31:39  ID:???.net(701)
>646
主問い合わせのrownumは主問い合わせのフェッチ順のはずで
>副問い合わせの結果が値
なのは、「主問い合わせのフェッチ順が副問い合わせのorder by順」な結果に過ぎないんじゃね
で、今問題なのは
「主問い合わせのフェッチ順が副問い合わせのorder by順」
なのは実装なのか仕様なのかって話なんだが
(主問い合わせの出力順が主問い合わせのフェッチ順通りかどうかは別の問題)

ま、どっちにしても個別DBMSの話だから続きはオラクルスレでやってくれればいいけど
コメント2件

656
NAME IS NULL[]   投稿日:2017/10/11 22:37:12  ID:f/rcAUbh.net(19)
不思議なのは、Oracleがインラインビューにorder byの仕様をあとから追加して並び順を付けたのに、なぜ並び順が不定と言い張っているのか?

最近のマニュアルはどんどん表現が変わって、Oracle Databaseの歴史まで間違いを埋め込んでいる。

いまでも使われているバージョンなのに誤情報が書かれているから、仕方がない側面もある。

オラクル社がわけのわからない外国に仕事を投げてたり、データベースに詳しくない人間に仕事をさせるからおかしくなる。

657
NAME IS NULL[]   投稿日:2017/10/11 22:47:13  ID:f/rcAUbh.net(19)
>655
それはOracleの構文が実装に近いから、標準SQLや他のRDBMSのSQLと比べるとそう感じるだけだと思うよ。

ソートはSELECTがネストするのに、構文ではネストしてないように見せているから初心者はそう思ってしまう。

結合もそうだけど、結合するとループのネストが発生することも知らないプロも多い。

あまりにしつこいから、時間があったら、実行計画を書くよ。
コメント1件

658
NAME IS NULL[sage]   投稿日:2017/10/11 22:52:23  ID:???.net(701)
サブクエリでorderby使えるようにしているオラクルがバカなんだよ
オラクルなんて使うなよ
コメント1件

659
NAME IS NULL[sage]   投稿日:2017/10/11 23:01:27  ID:???.net(701)
>654
別に決め付けてはないだろ
オラクル社のサポートチームの主張が間違ってて
自称オラクルエンジニアの主張が正しいことも可能性としてはゼロではないと思ってるよ
だからきちんとした根拠を提示しろって言ってんの

でも散々的はずれなことを書いてきて
やっと提示されたソースが>627みたいなレベルだから
今のところ誰も信用しない
コメント1件

660
NAME IS NULL[sage]   投稿日:2017/10/11 23:07:57  ID:???.net(701)
サポートチームという言葉は間違ってたか
どちらにしろThomas Kyteが間違ってて君が正しいという根拠があるんなら出してみれば

661
NAME IS NULL[]   投稿日:2017/10/11 23:08:39  ID:9hHhkBSp.net(3)
>655←わかったけど意地はってる人
>659←まだわかってないバカw
コメント2件

662
NAME IS NULL[sage]   投稿日:2017/10/11 23:33:27  ID:???.net(701)
Oracleスレに行かないのはOracleスレにもっと詳しい人がいるからやろなぁ

663
NAME IS NULL[sage]   投稿日:2017/10/11 23:35:44  ID:???.net(701)
>661
はあww
馬鹿が追加されたか…

パッケージソフトにおける外部仕様と内部実装の違いの意味を理解してないから
内部実装について延々と無駄レスしてんだろ

664
NAME IS NULL[sage]   投稿日:2017/10/11 23:42:53  ID:???.net(701)
>657
まさかと思うけど、一般的なRDBMSの実行計画で結合はネステッドループしかないと思ってるわけじゃないよな
で、オラクルがサブクエリのデータを扱う方法が、サブクエリの順序を保障した方法しか選択しない仕様なのかどうかの問題だと思うんだが

>658
多くのRDBMSでサブクエリのOrder Byは意味を持つようになってると思うけどな
ただしそのサブクエリ内でトップなりオフセットなり取るっていう前提で
rownumみたいにそのサブクエリ内ではOrder Byに影響されない変な疑似列使うのが悪いだけで
昔ならともかく今どき書くべきクエリじゃないなと
ORACLEにはそんな過去のバッドノウハウがいっぱいあるけどな

>661
別に意地張ってるわけでもなんでもなくて、初めから仕様か実装かって話をしてたはずなんだがね
その区別すらついてないから実装をグダグダと説明してたのかね
コメント1件

665
NAME IS NULL[sage]   投稿日:2017/10/12 00:57:57  ID:???.net(701)
マニュアルは信用ならん!
AskTOMの回答は間違ってる!!
俺が正しい!!!

またすごいのが来たね
ジャイアンも真っ青

666
NAME IS NULL[]   投稿日:2017/10/12 07:17:49  ID:aeNA2Xqu.net
残念、やっぱり>664も本質的にはバカだったかw

667
NAME IS NULL[sage]   投稿日:2017/10/12 09:09:43  ID:???.net(701)
あえて最初の質問>583に改めて答えてみる。

まず、>583は構文が間違っているので以下のように直す。
(SELECT句でつける別名はWHERE句では使えない。)

SELECT t.*, ROWNUM as num FROM ( SELECT * FROM 学生別点数テーブル ORDER BY 点数 DESC ) t WHERE ROWNUM <= 10;

このとき、WHERE句のROWNUMは副問合せ内のORDER BYの順序で振られる。
これはマニュアルに明確に書かれている。

しかし、このSELECT文全体の結果が副問合せ内のORDER BYの順序で
返されることは保証されていない。

もっと言えばSELECT句のROWNUMがWHERE句のROWNUMと同じになるとも限らない。
WHERE句を評価した後、SELECT句を評価するまでの間に
順序を変えてはいけないと決まっているわけではなく、
順序が変わればROWNUMも変わる可能性がある。
(副問合せを評価した後、主問合せのWHERE句を評価するまでの間にも
 同じことが言えるが、これはOracleが自分でマニュアルで規定している。)
コメント1件

668
NAME IS NULL[sage]   投稿日:2017/10/12 10:33:15  ID:???.net(701)
オラクルなんてオワコンじゃん

669
NAME IS NULL[sage]   投稿日:2017/10/12 10:52:48  ID:???.net(701)
もうしつこいなぁ
オラクル社に問い合わせろよ

670
NAME IS NULL[]   投稿日:2017/10/12 12:11:07  ID:+PtNHGsI.net(2)
>667
あなたの考えだと、インラインビューの並び順指定をわざわざ付けたのは、ROWNUMのためという主張になるが自分でもおかしいと思わないのか?

どうもSQLがどう処理されているのかをあまり知らないからそんなヘンテコな発想になる。

副問い合わせの結果セットの並び順が不定なら、結合もグループ化もできないことになる。
コメント2件

671
NAME IS NULL[sage]   投稿日:2017/10/12 13:25:32  ID:???.net(701)
>670
SQLがどう処理されてるかと、仕様として保証する動作かどうかは関係ない
それすら分からわないから一人でヘンテコりんな珍回答を繰り返す

672
NAME IS NULL[sage]   投稿日:2017/10/12 13:32:29  ID:???.net(701)
まあしかし、メーカーに「保障された実装」とメーカーが発表した「仕様」でどれほどの違いがあるのかという
保障された実装というものを考えると実装の区別もどうでもよくね

つうことでこの話終わりにしようぜ
コメント2件

673
NAME IS NULL[sage]   投稿日:2017/10/12 13:51:13  ID:???.net(701)
>670
>副問い合わせの結果セットの並び順が不定なら、結合もグループ化もできないことになる。
ここでいう不定って、もとのORDER BY以外の順序の可能性があるってことで
たとえばハッシュジョインならハッシュキー順に、ソートマージならその結合キー順にならんでる可能性があるんじゃないかね
コメント1件

674
NAME IS NULL[sage]   投稿日:2017/10/12 15:17:56  ID:???.net(701)
>672
保証な
guarantee

675
NAME IS NULL[sage]   投稿日:2017/10/12 16:01:26  ID:???.net(701)
>672
仕様として約束された動作でなければ断りなく変わりうるから
明確にアナウンスされる仕様変更とはベンダー側もユーザー側も対応が違ってくる
その違いが重要じゃないと言い切れる場合を除いて区別は必須

676
NAME IS NULL[]   投稿日:2017/10/12 19:29:31  ID:+PtNHGsI.net(2)
>673
もともとの質問者はリレーショナルデータベースでは、ORDER BYしないかぎりはレコードの並び順は保証しないという仕様から疑問に思っただけだと思われる。

内部的にソートが発生するSQLだったり、並び順があるインデックスが使用されたり、たまたま実際のデータ格納順が同じで、ORDER BYがあってもなくても結果が同じなのと、RDBMSの仕様はまったく異なる話。

そもそもORDER BYは、結果に対する並び替え指示だから、イメージとしてはSELECTを二度行っているようなもの。

677
583[sage]   投稿日:2017/10/12 22:02:19  ID:???.net(701)
>583の元の質問をさせてもらった者ですが、話が大きくなり申し訳ありません。
議論を止める権利などは無いと思いますが、
私個人の問題としては(一旦は)解決しているので報告させて頂きます。

678
NAME IS NULL[sage]   投稿日:2017/10/12 22:24:52  ID:???.net(701)
律儀やね

ORDER BY ROWNUM じゃなく
ORDER BY 点数 DESC って書いておくといいよ
サブクエリ内と同じ表現ね
コメント1件

679
583[sage]   投稿日:2017/10/13 20:31:05  ID:???.net(701)
>678
ありがとうございます。今後、修正する際は気をつけます。

また、幾つかのレスで「Row_number()を使えば」とアドバイス頂いています。
仰るとおりで、Row_number()であれば心配しなくて済みそうですが、
何年も前に客先に納品しているシステムでして勝手に修正は難しい状況です。
作るときに気が付いて欲しかったなあ・・・
コメント1件

680
NAME IS NULL[]   投稿日:2017/10/13 21:01:00  ID:e4fuwytS.net
いい加減オラクルスレでやれっつてんだ、このクソボケ

681
NAME IS NULL[sage]   投稿日:2017/10/13 21:10:10  ID:???.net(701)
こんな過疎板でキレることじゃねーだろww
約1名を除いてwww

682
NAME IS NULL[]   投稿日:2017/10/13 21:47:24  ID:98IUocac.net
>679 の発言を見てるとまだ勘違いしてるようだな。

683
NAME IS NULL[]   投稿日:2017/10/13 22:19:00  ID:npPDgh/r.net
バカを誘うんじゃない

684
NAME IS NULL[sage]   投稿日:2017/10/16 07:42:36  ID:???.net(701)
よ〜し今年中にSQL理解できるようになるぞ〜(^〜^)
よろしく!

685
NAME IS NULL[sage]   投稿日:2017/10/16 12:48:05  ID:???.net(701)
よろチクビ!

686
NAME IS NULL[sage]   投稿日:2017/10/16 18:58:20  ID:???.net(701)
ジャン=ポール・サルトルさんとデニス・リッチーさんはどっちの方が天才ですか?

687
NAME IS NULL[sage]   投稿日:2017/10/16 19:15:13  ID:???.net(701)
アングロサクソンは最強の人種ですか?

688
NAME IS NULL[sage]   投稿日:2017/10/16 22:11:05  ID:???.net(701)
いいえ、サモア人が人類最強です。

689
NAME IS NULL[sage]   投稿日:2017/10/20 19:21:50  ID:???.net(701)
SQL超初心者です。
特定の列を主キーにする場合、主キーの名前をその列名と同じにすると何か問題出ますか?
主キーはどんな名前がお勧めですか?
コメント3件

690
NAME IS NULL[]   投稿日:2017/10/20 19:35:23  ID:MhmtGzT7.net
>689
そんな疑問持ったことなかったなw何も考えずにPK_hageとかしてたけどw
おまえセンスいいかもw
コメント2件

691
NAME IS NULL[sage]   投稿日:2017/10/20 19:43:24  ID:???.net(701)
主キーは常に'id'だわ
コメント1件

692
NAME IS NULL[sage]   投稿日:2017/10/20 20:11:16  ID:???.net(701)
>691
なぜですか?

693
NAME IS NULL[sage]   投稿日:2017/10/20 20:13:02  ID:???.net(701)
>690
PK_派とid派が有るんですか?

694
NAME IS NULL[sage]   投稿日:2017/10/20 20:42:11  ID:???.net(701)
>689
制約には名前をつけることができるが
主キー制約の場合はテーブル毎に一個しか持てないので
名前をつけようがつけまいが利便性は特に変わらない
(ので、主キー制約自体に名前をつけることは通常ない)
コメント2件

695
NAME IS NULL[]   投稿日:2017/10/20 20:56:42  ID:RTm/vvXY.net(2)
>694
名前の無い主キーを作成出来るのですか?

696
NAME IS NULL[sage]   投稿日:2017/10/20 20:59:41  ID:???.net(701)
主キーの名前って言えば普通は列名のこと
PK制約の名前とは別だよ

CREATE TABLE Persons (
ID int NOT NULL PRIMARY KEY,



↑こう書けばDBMSで規定されてる命名ルール使ってPK制約名が付けられる
コメント1件

697
NAME IS NULL[]   投稿日:2017/10/20 21:06:42  ID:RTm/vvXY.net(2)
>696
「主キー制約」と「PRIMARY KEY 制約」は別物と言う意味に解釈できるのですが、
それで良いのでしょうか?
コメント3件

698
NAME IS NULL[]   投稿日:2017/10/20 21:06:52  ID:aE0VLgo8.net(9)
>694
名前のない主キー制約はない。

699
NAME IS NULL[]   投稿日:2017/10/20 21:07:57  ID:aE0VLgo8.net(9)
>697
それは日本語で言うか英語で言うかの違いで同じ

700
NAME IS NULL[sage]   投稿日:2017/10/20 21:11:53  ID:???.net(701)
制約に名前をつけなかった場合、OracleならSYS_○○、
DB2ならSQL○○など、システムが勝手につける名前がつく

701
NAME IS NULL[]   投稿日:2017/10/20 21:12:38  ID:aE0VLgo8.net(9)
>697
主キー列(カラム)は、そのテーブルで主キー制約がある列(カラム)のこと。

単に主キーというひとが多いからよくない。

主キー列はただの列名。主キー制約名は主キー制約名。

主キー制約に名前をつけなくてRDBMSが自動的に名前をつけるが、プロなら管理の都合上、ちゃんと名前をつける。

702
NAME IS NULL[sage]   投稿日:2017/10/20 21:13:24  ID:???.net(701)
CREATE TABLE Persons (

PRIMARY KEY (ID)


こう書いても同じでDBが自動で名前を付けてくれる
コメント1件

703
NAME IS NULL[sage]   投稿日:2017/10/20 21:14:37  ID:???.net(701)
また自称プロかよww

704
NAME IS NULL[sage]   投稿日:2017/10/20 21:14:42  ID:???.net(701)
>697
主キー制約 = PRIMARY KEY 制約 だよ。(主キー=PRIMARY KEY)
ひとつの列が主キーであるなら、その列の名前=主キーの名前、という理解でよい

主キーの名前の付け方にはいろいろな流儀があるが、
SQLを利用するフレームワーク (例えば Ruby on Rails)との関係で
id という名前にすることが最近は多い
>690 が書いているように、pk_hage みたいな人も多い
(「サロゲートキー」で検索するといろいろ出てくるはず)
コメント1件

705
NAME IS NULL[sage]   投稿日:2017/10/20 21:16:35  ID:???.net(701)
>704
PK_hageはプライマリキー制約の名前で列名じゃないよ
コメント1件

706
704[sage]   投稿日:2017/10/20 21:17:18  ID:???.net(701)
>702 が書いているように、
RDBMSに主キーの値を自動的に割り振らせたいようなときにも
列名を id とする

707
NAME IS NULL[]   投稿日:2017/10/20 21:17:18  ID:aE0VLgo8.net(9)
たぶん主キー制約名で一番多い命名は、PK_(テーブル名)。

708
704[sage]   投稿日:2017/10/20 21:18:46  ID:???.net(701)
>705
制約名にすることが多いけど、列名にする人もいる
(質問者はそのあたりがごっちゃになっているっぽいけど)
コメント2件

709
NAME IS NULL[sage]   投稿日:2017/10/20 21:18:51  ID:???.net(701)
制約名と列名を混同している人がいるな
複合キーの場合どうすると思ってるんだ?

710
NAME IS NULL[]   投稿日:2017/10/20 21:20:15  ID:aE0VLgo8.net(9)
ただ"ID"という名前の列を作って主キー項目にするのは、たいしたデータベースを必要としていない人の習慣。
コメント2件

711
NAME IS NULL[sage]   投稿日:2017/10/20 21:21:47  ID:???.net(701)
>710
それは言い過ぎじゃないかな
コメント1件

712
NAME IS NULL[]   投稿日:2017/10/20 21:22:24  ID:aE0VLgo8.net(9)
主キー列名、主キー制約名、インデックス名がちゃんと説明できるレベルの人は、この板にはほとんどいない。

713
NAME IS NULL[sage]   投稿日:2017/10/20 21:23:54  ID:???.net(701)
create table hoge (id integer primary key)
とした場合、制約名はシステムが勝手につけた名前になる

create table hoge (id integer constraint hage primary key)
とすると制約名はhageとなる
コメント2件

714
NAME IS NULL[]   投稿日:2017/10/20 21:25:43  ID:aE0VLgo8.net(9)
>711
SQLは同じ名前の列は、同じ属性と見なすから標準SQLでもナチュラルジョインがあるわけで、良いはずがない。

715
NAME IS NULL[]   投稿日:2017/10/20 21:27:31  ID:aE0VLgo8.net(9)
>713
あんたどのRDBMSの方言で説明してんの?

716
NAME IS NULL[sage]   投稿日:2017/10/20 21:28:23  ID:???.net(701)
>708
お、そう
それはアンチパターンだね

>710
トレードオフだからね
君はそれを知らないだけ
コメント1件

717
NAME IS NULL[sage]   投稿日:2017/10/20 21:30:12  ID:???.net(701)
もう自称プロに火つけんなよ

718
NAME IS NULL[sage]   投稿日:2017/10/20 21:31:14  ID:???.net(701)
ああ、order byの人か

719
NAME IS NULL[]   投稿日:2017/10/20 21:36:03  ID:aE0VLgo8.net(9)
>716
何がトレードオフだよ。自分自身の関心事かそうでないかだろ。

有名なフレームワークやパッケージでもDBにうといのか、ひどい設計はよくある。

720
NAME IS NULL[sage]   投稿日:2017/10/20 22:02:38  ID:???.net(701)
>708
ごっちゃにはなっていません。
最初の質問に書いたように列名と主キー名をあえて同じにすると何か困る事が有るかどうかを知りたかったのです。私はPK_派です。
コメント2件

721
NAME IS NULL[sage]   投稿日:2017/10/20 22:05:07  ID:???.net(701)
>720
「主キー名」って何を指しているの? 主キー制約の名前?
コメント1件

722
NAME IS NULL[sage]   投稿日:2017/10/20 22:14:21  ID:???.net(701)
>721
そうでした。
コメント1件

723
NAME IS NULL[sage]   投稿日:2017/10/20 22:20:44  ID:???.net(701)
制約名は重要なものじゃないから自動でつけられるだろ。制約だけ削除したい時にしか使われないと思う。
だから好きにすればいい。
コメント1件

724
NAME IS NULL[sage]   投稿日:2017/10/20 22:20:54  ID:???.net(701)
>722
なるほど。その言葉の使い分けはとても重要なので今後気をつけてー

725
NAME IS NULL[sage]   投稿日:2017/10/20 22:28:05  ID:???.net(701)
>713を知らなかった人が数名は居るってことか

726
NAME IS NULL[sage]   投稿日:2017/10/20 23:12:05  ID:???.net(701)
>720
主キー制約のことを単に「主キー」とは呼ばないから
それだけは覚えといてよ

727
NAME IS NULL[sage]   投稿日:2017/10/20 23:15:46  ID:???.net(701)
試したことも試そうと思ったことも無いけど、制約名ってカラム名とかぶっても大丈夫なのか?
それと他のテーブルとかぶっても良いのか?
SQLServerの2008R2だと
>制約名は、テーブルが所属するスキーマ内で一意である必要があります。
って書いてあるんだが
コメント1件

728
NAME IS NULL[]   投稿日:2017/10/20 23:22:56  ID:VNmP8QHa.net
だめだから自動のはSYS_連番とかになってるよね
自動付与のやつだとキー重複とかでエラーになったとき
エラーログとかでぱっとわからないからPK_表名にしてる。

インデックスの名前付けにいつも悩む。
表とか列とかつなげてくと長くなるし・・
コメント1件

729
NAME IS NULL[sage]   投稿日:2017/10/20 23:26:27  ID:???.net(701)
>727
制約名同士でぶつかるなって話だよ
http://sqlfiddle.com/#!6/bacd6/1/0

730
NAME IS NULL[sage]   投稿日:2017/10/21 00:02:55  ID:???.net(701)
自称プロはOracleしか知らなそうだし、Oracle知らなそう
コメント1件

731
NAME IS NULL[]   投稿日:2017/10/21 00:50:01  ID:Eth7MdL6.net(2)
>730
自分は意味のあることは書かず、他人批判、もっと言えば第三者から見ても嫌なやつと思われる言動をするのは、よほどひねくれているぞ。
コメント1件

732
NAME IS NULL[]   投稿日:2017/10/21 00:54:59  ID:Eth7MdL6.net(2)
>723
制約が重要でない?

まあ汎用機世代の人間がテーブル名もカラム名も重要ではないと言うのと同じ感覚なのか?

733
NAME IS NULL[sage]   投稿日:2017/10/21 05:29:00  ID:???.net(701)
>728
そもそもの>689の話は、制約名を列名と同じにするって話じゃなかったのか
できるDBある?そんなことはできないで終わりの話じゃないのか
コメント2件

734
NAME IS NULL[sage]   投稿日:2017/10/21 08:11:31  ID:???.net(701)
DMLで多用するテーブル名、カラム名と基本的にDDLでしか使用しない制約名、インデックス名とじゃ
命名の重要度が違うのは当然だろう。

735
NAME IS NULL[sage]   投稿日:2017/10/21 09:00:42  ID:???.net(701)
>731
批判に見えましたか!
自覚があるんやなぁ

736
NAME IS NULL[]   投稿日:2017/10/21 09:46:12  ID:y12hXRx2.net(2)
案の定質問の意味すらわからない奴が答えたがって場を荒すいつものパターンw

737
NAME IS NULL[sage]   投稿日:2017/10/21 09:51:46  ID:???.net(701)
それID見えてるやつのせいで起きるんだよなぁ
コメント1件

738
NAME IS NULL[]   投稿日:2017/10/21 09:58:25  ID:y12hXRx2.net(2)
>737
他人のせいすんなクズw

739
NAME IS NULL[sage]   投稿日:2017/10/21 18:51:28  ID:???.net(701)
>733
だいたいどのDBMSでもできるよ

740
NAME IS NULL[sage]   投稿日:2017/10/21 22:04:08  ID:???.net(701)
確かにID無しだけ見ると平和な良スレだな

741
名無しさん@そうだ選挙に行こう! Go to vote![sage]   投稿日:2017/10/22 15:51:36  ID:???.net(701)
>733
できるのか
できるということはシステム的には問題ないって事だな
分かりにくくなったり手間が増えるかもしれんが

じゃあ、PK列名を全テーブルに対してユニークにする派の人なら
PK制約名をPKのカラム名と同じにするでもいいんじゃね
複合主キーどうするとかあるけどな

主キーは全部”ID”派の人はしらん
まあそう言う人は主キー制約の名前なんてそれこそ自動付加でいいんだろう
コメント1件

742
名無しさん@そうだ選挙に行こう! Go to vote![sage]   投稿日:2017/10/22 16:42:01  ID:???.net(701)
>741
PKはテーブルに一つなのと制約名で重複しちゃダメなDBMSがほとんどなので
自動付与じゃなければPK_tablenameみたいにテーブル名を入れといたほうがいい
インデックスと違ってPK制約名からどの列がPKなのかを知りたいって人いないよね?

それに他の制約名と違ってPK制約名は意識的に扱うことが基本ないから自動付与で十分なことが多い
SQL ServerやPostgresなんかは自動付与でも分かりやすい名前になる


743
名無しさん@そうだ選挙に行こう! Go to vote![]   投稿日:2017/10/22 19:04:47  ID:B6C5gZpT.net(2)
今回初めて知って嬉しいのはわかるけどこんなにいつまでも引っ張るような話題ではない

744
NAME IS NULL[sage]   投稿日:2017/10/22 20:01:12  ID:???.net(701)
はいはい
自称プロなら管理の都合上、ちゃんと名前つける( ー`дー´)キリッ
だもんねww

745
NAME IS NULL[sage]   投稿日:2017/10/22 20:58:53  ID:???.net(701)
話題としては意味はあるけど、SQL質疑応答スレでやる内容ではないな

746
NAME IS NULL[]   投稿日:2017/10/22 22:38:37  ID:B6C5gZpT.net(2)
あまのじやくやのうw

747
NAME IS NULL[]   投稿日:2017/10/22 23:05:36  ID:hqoDUL2z.net(2)
すっごい不評なegov法令検索を設計したのは名古屋大学の外山教授ですか?
不評過ぎます

748
NAME IS NULL[]   投稿日:2017/10/22 23:07:02  ID:hqoDUL2z.net(2)
すっごい不評な法令検索つくったくせに賞をもらっている意味不明な教授ですか?

749
NAME IS NULL[sage]   投稿日:2017/10/22 23:53:08  ID:???.net(701)
データベース板でID見えてるやつは地雷であり荒らしよ
無視推奨

750
NAME IS NULL[]   投稿日:2017/10/23 00:27:40  ID:mf1jBI9V.net(3)
豊田真由子様に罵倒されたい

751
NAME IS NULL[sage]   投稿日:2017/10/23 13:55:18  ID:???.net(701)
JavaでSQL書いてRDB使いまくりたいんですがそうなるためにこれ読んどけ見たいなのありませんか?
DBにデータを記憶するのはもちろんDBから数値や文字列を取り出してjava側で変数に代入したりして使いこなせるようになりたいです。
コメント2件

752
NAME IS NULL[]   投稿日:2017/10/23 15:29:30  ID:CzSV0ugc.net
>751
そのRDBが何なのか?
コメント1件

753
NAME IS NULL[sage]   投稿日:2017/10/23 15:53:41  ID:???.net(701)
>751
JDBCの使いかたはわかってる?
コメント1件

754
NAME IS NULL[sage]   投稿日:2017/10/23 17:30:16  ID:???.net(701)
>752
どれ使って良いかよく解らないんですが今はスッキリ解るシリーズのSQLの本読んでます。
MySQLかpostgreSQLがよさそうだなと思いますがSQLserverの無料版もよさそうだなと思って迷ってます。
>753
使い方はよく解りませんがJDBCって言うの使えばどのDBMSでも多少ルールが違えど似たような扱いができるんですよね?
スッキリ解るシリーズの実戦編に少し書いてあった気がしますがほんの少しだけだった気がします。
なんかJavaとDBの連携した使い方がみっちりつまった本ってありませんか?初学者でもわかるようなので・・・
コメント2件

755
NAME IS NULL[]   投稿日:2017/10/23 17:33:48  ID:ZhgI//rN.net
その選択肢はWindowsで動かす予定かな
DBはDBで単体でまず扱えるようにならないとあとあときついよ

756
NAME IS NULL[sage]   投稿日:2017/10/23 17:46:09  ID:???.net(701)
>754
Javaデータアクセス実践講座

中で使ってるのはMySQL

javaとSQLがそれぞれわかっていることが前提条件になっているとは思う
一応これでJavaからMySQLに接続してどうのこうのってのは出来るようになった。
コメント1件

757
NAME IS NULL[]   投稿日:2017/10/23 20:14:17  ID:mf1jBI9V.net(3)
Javaというより、RDBの勉強の方がいいと思うけどな。JavaとRDBのやり取りは、知らないフレームワークを介さないのであれば難しいわけではない。
コメント1件

758
NAME IS NULL[sage]   投稿日:2017/10/23 20:48:54  ID:???.net(701)
>757
>知らないフレームワークを介さないのであれば

学ばないでいつ知るんだよw
JDBCならともかくHibernateにしろSpring Data JPAにしろ
中身を把握するにはそれ相応の学習コストが必要
コメント1件

759
NAME IS NULL[]   投稿日:2017/10/23 21:09:51  ID:mf1jBI9V.net(3)
>758
JDBC以外は全部、Java EEじゃないんですけど?

JDBCと言ってるのにいきなり謎のフレームワークを使えとはトレーナーとしてもありえない。
コメント1件

760
NAME IS NULL[sage]   投稿日:2017/10/24 01:31:44  ID:???.net(701)
謎のフレームワーク?

761
NAME IS NULL[]   投稿日:2017/10/24 02:12:17  ID:Ftk4ZC9L.net
>754 は超初心者だぜ?

762
NAME IS NULL[sage]   投稿日:2017/10/24 07:23:26  ID:???.net(701)
>756
ありがとうございます。その本買ってみます。

763
NAME IS NULL[sage]   投稿日:2017/10/24 16:01:08  ID:???.net(701)
>759
トレーナーとして?
プロの次はトレーナー

764
NAME IS NULL[]   投稿日:2017/10/26 00:31:39  ID:Z3UH5ceX.net
なんでそんなにプロにつっかかるん?
ふいんき悪くなるからやめたら?
コメント1件

765
NAME IS NULL[sage]   投稿日:2017/10/27 10:04:02  ID:???.net(701)
SQL初心者です。
カラムをNULL許容型にするのは良くないと言った説明をいろんなサイトで見ます。
実際のところ、データが無い状態をNULLで表現する手法は、使わないほうが良いのでしょうか?
DBを使いまくっている専門家の人の意見をお聞かせください。
コメント3件

766
NAME IS NULL[sage]   投稿日:2017/10/27 10:41:51  ID:???.net(701)
>765
専門家じゃないけど

> カラムをNULL許容型にするのは良くないと言った説明をいろんなサイトで見ます。
必要ないなら非許容にするべき
理由は一番下のリンク先とかを読んでみて

> 実際のところ、データが無い状態をNULLで表現する手法は、使わないほうが良いのでしょうか?
そのケースなら俺は普通に使う
ただNULLの扱いは初心者にはちょっと直感に反するところがあるから注意が必要
https://codezine.jp/article/detail/532

767
[]   投稿日:2017/10/27 10:46:26  ID:KUE3Fyml.net
これは・・・・・面白い!!!
https://blogs.yahoo.co.jp/antseq01/15073181.html

768
NAME IS NULL[]   投稿日:2017/10/27 11:19:35  ID:7pjSfMZX.net(8)
>765
リレーショナルデータベースではデータがない、値がないことを単にNULLと定義しているので、勘違いしないように。

769
NAME IS NULL[sage]   投稿日:2017/10/27 11:41:03  ID:???.net(701)
自分はNULL活用してるけどな

0や空文字 と 未定義(未入力) とは意味合いが違う
フラグを別に設けるのも嫌だし

最近は言語側でも int? n; みたいなことが出来るようになって嬉しい

770
NAME IS NULL[sage]   投稿日:2017/10/27 11:48:09  ID:???.net(701)
インデックスがねぇ
コメント1件

771
NAME IS NULL[]   投稿日:2017/10/27 11:55:53  ID:7pjSfMZX.net(8)
>770
NULLを検索するという設計がおかしい。

772
NAME IS NULL[sage]   投稿日:2017/10/27 12:42:08  ID:???.net(701)
あれ、WHERE 項目 IS NULL ってインデックス効かないの?

773
NAME IS NULL[sage]   投稿日:2017/10/27 14:49:04  ID:???.net(701)
NULLを検索する設計がおかしいとは思わんが
インデックスが効くかどうかはDBMSによる

774
NAME IS NULL[sage]   投稿日:2017/10/27 14:52:48  ID:???.net(701)
「とある項目が未入力のものを探す」という風なのだが、わざわざフラグ立ててやるの?
コメント1件

775
NAME IS NULL[]   投稿日:2017/10/27 14:54:13  ID:7pjSfMZX.net(8)
NULLを検索が多発している時点で考え方がおかしい。

776
NAME IS NULL[]   投稿日:2017/10/27 14:58:18  ID:7pjSfMZX.net(8)
>774
言わんとすることはわかるが、なんで未入力とわかっている状態を検索して再度、確認する設計なのか?
コメント1件

777
NAME IS NULL[sage]   投稿日:2017/10/27 14:59:19  ID:???.net(701)
だから、「とある項目が未入力のものを探す」という風なのだが、わざわざフラグ立ててやるの?
机上じゃなくて現実の運用場面を経験したことないのか?
コメント1件

778
NAME IS NULL[sage]   投稿日:2017/10/27 15:01:04  ID:???.net(701)
>776
完全に入力が完了しないとコミットできない仕様(打ちかけを許容しない仕様)は
ちょっとユーザーフレンドリーじゃないと思うよ?
コメント1件

779
NAME IS NULL[]   投稿日:2017/10/27 15:24:58  ID:7pjSfMZX.net(8)
>777
そもそもNOT NULLにしなくてはいけないと思い込んでいる初心者の話だろうが?

780
NAME IS NULL[sage]   投稿日:2017/10/27 16:22:16  ID:???.net(701)
>765
バグを生みやすいからNOT NULLにできるんならそうしたほうがいい
といっても全部排除するにはそれなりの手間がかかるので落とし所を決める必要がある

単にデータが無い状態を表現する場合じゃなく
データが「まだ」無い状態を表現する場合にNULLがよく使われる
簡単にデフォルト値が決められるようなものはNULL許容にしない
コメント1件

781
NAME IS NULL[sage]   投稿日:2017/10/27 16:40:52  ID:???.net(701)
>778
入力完了済みのデータと入力途中のデータを一つのテーブルで管理するなら
完了済みかどうかの状態を管理するカラムを用意してそれを検索するんじゃないの?
特定のカラムがNULLだからXXという状態だと判断するって方法は極力避けたほうがいいと思うよ

782
NAME IS NULL[]   投稿日:2017/10/27 16:53:00  ID:7pjSfMZX.net(8)
>780
変なこと言うな

783
NAME IS NULL[]   投稿日:2017/10/27 16:55:39  ID:7pjSfMZX.net(8)
NULL許容はC#用語か。RDB用語で言ってくれ。不親切。

784
NAME IS NULL[sage]   投稿日:2017/10/27 18:42:11  ID:???.net(701)
>764
この流れを見れば
ふいんき悪くしてるのが誰かアホでも分かるよね?
コメント2件

785
NAME IS NULL[]   投稿日:2017/10/27 18:51:51  ID:7pjSfMZX.net(8)
>784
相当な小心者だな

786
NAME IS NULL[sage]   投稿日:2017/10/27 18:53:20  ID:???.net(701)
この質問、例の人の自演だろ
あんま相手しないほうが良さそう

787
NAME IS NULL[sage]   投稿日:2017/10/27 18:53:29  ID:???.net(701)
はーい!ID :7pjSfMZX君でーす!!

788
NAME IS NULL[sage]   投稿日:2017/10/27 19:21:39  ID:???.net(701)
nullはminとかmaxとかの集計関数で無視したい場合とか
更新が必要な項目で未更新状態の意味合いで使うな
コメント1件

789
NAME IS NULL[sage]   投稿日:2017/10/27 20:01:02  ID:???.net(701)
そういえばオラクルはキー項目でもnull許可できる糞仕様だったな
またオラクル使いか

790
NAME IS NULL[sage]   投稿日:2017/10/27 20:47:43  ID:???.net(701)
Oracleでもさすがに主キーにNULLは入らない
外部キーには入るがそれは別に普通のこと

それよりOracleは長さゼロの文字列とNULLが同じ意味になるという
糞仕様をいつまでも捨てられずにいることが問題
コメント1件

791
NAME IS NULL[]   投稿日:2017/10/27 20:50:02  ID:n2vV1nnl.net
>790
地雷だな、それって

792
NAME IS NULL[sage]   投稿日:2017/10/27 21:07:35  ID:???.net(701)
ま〜たこうやって、ボラクルの話になっていくのであった。

793
NAME IS NULL[sage]   投稿日:2017/10/27 21:31:19  ID:???.net(701)
>788
>nullはminとかmaxとかの集計関数で無視したい場合
条件で絞ればいいだけじゃないの?

794
NAME IS NULL[sage]   投稿日:2017/10/27 22:49:58  ID:???.net(701)
正規化してテーブルを増やしてデータの一貫性を保ちやすくするのは解ったんですが
テーブル増やしたらデータを追加するとき複雑になりませんか?
あっちのテーブルに日付情報入れて利用者IDいれてこっちのテーブルに金額入れてとか混乱しそうな気がしますが

795
NAME IS NULL[]   投稿日:2017/10/28 00:43:45  ID:SXU3olx1.net(6)
>784
え?ふいんき悪いのか?アホ的には?

796
NAME IS NULL[sage]   投稿日:2017/10/28 04:44:21  ID:???.net(701)
NULL使わない人はデータが無い状態をどうやって表現するのですか?
コメント7件

797
NAME IS NULL[sage]   投稿日:2017/10/28 06:49:50  ID:???.net(701)
リレーションを分ける
コメント1件

798
NAME IS NULL[sage]   投稿日:2017/10/28 08:02:48  ID:???.net(701)
NULLは必要だよ。
例えば日付型の生年月日があるとして、
NOT NULL なら default値はどうすんの?

799
NAME IS NULL[sage]   投稿日:2017/10/28 08:28:03  ID:???.net(701)
>797
kwsk

800
NAME IS NULL[sage]   投稿日:2017/10/28 08:50:09  ID:???.net(701)
create table T (
pkey int primary key,
a int not null,
b int null
)

こんなリレーションなら下のように分ける

create table TA (
pkey int primary key,
a int not null
)

create table TB (
pkey int primary key,
b int not null
)

元のaがnot nullでbがnullという条件はTBからTAへの外部参照制約で表現できる
コメント3件

801
NAME IS NULL[]   投稿日:2017/10/28 11:10:00  ID:qpJvhhHo.net
>800
それは方言のじゃないのか?

802
NAME IS NULL[sage]   投稿日:2017/10/28 11:28:57  ID:???.net(701)
どこのこと?

803
NAME IS NULL[sage]   投稿日:2017/10/28 11:37:56  ID:???.net(701)
>800
いちいちそんな面倒なことやってんの?

804
NAME IS NULL[sage]   投稿日:2017/10/28 12:35:01  ID:???.net(701)
NOT NULL縛りの是非はともかく、手間としては正規化とたいして違わない気がするが。
正規化を「いちいちそんな面倒なこと」と言う奴は少ないだろう。

805
NAME IS NULL[sage]   投稿日:2017/10/28 12:58:56  ID:???.net(701)
違うだろ〜
ハゲ〜

806
NAME IS NULL[sage]   投稿日:2017/10/28 13:31:18  ID:???.net(701)
null 可能列が10個あったら表が10個増えるのか w
まあ頑張れやとかしか言えない

807
NAME IS NULL[sage]   投稿日:2017/10/28 14:56:15  ID:???.net(701)
単純に10個増えるとは限らないよ

派生関係でうまく処理できる場合もあるけど
任意項目があるたびに派生関係を作っていくのはあまり現実的ではないよね

808
NAME IS NULL[sage]   投稿日:2017/10/28 15:58:18  ID:???.net(701)
思いつきでアホなこと言ったばかりに言い訳が苦しいなw
コメント1件

809
807[sage]   投稿日:2017/10/28 16:39:43  ID:???.net(701)
>808
俺は派生関係提示したやつと別人だぞ

810
NAME IS NULL[sage]   投稿日:2017/10/28 19:05:25  ID:???.net(701)
>800
で、外部結合して結局項目bがNULLになるのな
コメント1件

811
NAME IS NULL[]   投稿日:2017/10/28 19:34:58  ID:Nv4Gn8Ik.net
ID 強制表示に出来ないのかな

812
NAME IS NULL[sage]   投稿日:2017/10/28 19:51:25  ID:???.net(701)
>810
ならなかったらそもそも>796への答にはならんだろ
コメント2件

813
NAME IS NULL[]   投稿日:2017/10/28 19:58:00  ID:SXU3olx1.net(6)
そもそも「データが無い状態」という情報をどうしても記録しておかなければいけない状況ってのはそうそうない
そのシステムの性質にもよるけど
コメント1件

814
NAME IS NULL[sage]   投稿日:2017/10/28 20:06:21  ID:???.net(701)
閉世界が前提だから、「データがある」状態だけ記録しておけばそれが存在しなければ「無い」だと思うが。
明示的に「無い」ことを記録しているわけじゃないだろう。
コメント1件

815
NAME IS NULL[]   投稿日:2017/10/28 20:55:50  ID:SXU3olx1.net(6)
>814
いやそういう禅問答的な屁理屈を言われても「その通りですね」としか言えんけどw
何か反論したい事でもあるの?
コメント1件

816
NAME IS NULL[sage]   投稿日:2017/10/28 21:10:26  ID:???.net(701)
>812
外部結合の結果とはいえ、デーが無い場合はNULLになるってことだ
直接テーブルに入れてないとは言えNULL使ってるわけだから>796の回答足り得てないと思うけど?
コメント1件

817
NAME IS NULL[sage]   投稿日:2017/10/28 21:19:58  ID:???.net(701)
>815
データが無いことを記録する必要があるかどうかという問い自体がナンセンスということ。
コメント1件

818
NAME IS NULL[sage]   投稿日:2017/10/28 21:22:55  ID:???.net(701)
>812
それってb列に直接null入れるとのたいして違わなくね?

819
NAME IS NULL[sage]   投稿日:2017/10/28 21:29:12  ID:???.net(701)
>816
NOT NULLにしたとしても外部結合したらNULL発生しうるじゃん
そうすると>796への回答足り得ないの?
コメント1件

820
NAME IS NULL[sage]   投稿日:2017/10/28 21:30:47  ID:???.net(701)
派生関係はNULLを使わないために導入するものじゃないから話が噛み合わないのかもね
コメント1件

821
NAME IS NULL[]   投稿日:2017/10/28 21:38:29  ID:SXU3olx1.net(6)
>817
ん?つまりnot null制約自体の存在を否定したいのか?

822
NAME IS NULL[sage]   投稿日:2017/10/28 21:59:40  ID:???.net(701)
「データが無いことを記録する」手段が唯一NULL許可フィールドのみなのであれば
NOT NULL制約と関係なくはないのかもしれんが、まぁ、関係ないよな。
コメント1件

823
NAME IS NULL[]   投稿日:2017/10/28 22:05:56  ID:SXU3olx1.net(6)
>822
いや論じる事がナンセンスなんだろ?
その事と関係あるとかないとか唯一とか関係ないよね?
お前は何を言いたいの?
コメント1件

824
NAME IS NULL[sage]   投稿日:2017/10/28 22:16:58  ID:???.net(701)
質問者の>796、とりあえずどうにか話の方向をどうにかしてくれよ。
nullの話は簡単に結論が出るようなもんじゃないんで、いつまでも続けられても鬱陶しいだけなんだ

825
NAME IS NULL[sage]   投稿日:2017/10/28 22:30:08  ID:???.net(701)
人と違ったことを言わないと気がすまない人っているね
俺は俺はってw

826
NAME IS NULL[sage]   投稿日:2017/10/28 22:41:07  ID:???.net(701)
こんな過疎スレで話が続いても誰も困らんだろ
それより質問者を含めスレ読んでるやつが
多くの選択肢を知ることができるほうが意義があると思うぞ

827
NAME IS NULL[sage]   投稿日:2017/10/28 22:50:23  ID:???.net(701)
禅問答は傍で見ているとうざいが、かといってテーブル10個作るのは面倒だなんてレベルの話ばっかりでもなぁ。
コメント2件

828
NAME IS NULL[sage]   投稿日:2017/10/28 23:15:38  ID:???.net(701)
>823
「必要性があるとないとにかかわらず、意図的に「記録」するまでもなく、
「データが無い状態」というのはデータベース上のデータ自体で表現される
ものだから、>813で書いている言明はそもそも意味がない」

本来なら「その通りですね」で終わってた話。
コメント2件

829
NAME IS NULL[]   投稿日:2017/10/28 23:23:38  ID:SXU3olx1.net(6)
>828
いやだから何を言いたいのお前?w

830
NAME IS NULL[sage]   投稿日:2017/10/28 23:25:21  ID:???.net(701)
>827
おまえの頭が低レベルすぎるだけ

831
NAME IS NULL[sage]   投稿日:2017/10/29 00:03:43  ID:???.net(701)
>827
無意味なテーブル作るのなんか、たとえ1個でも願い下げだわ
作るのが面倒とか以前の問題

832
NAME IS NULL[sage]   投稿日:2017/10/29 03:06:41  ID:???.net(701)
>819
>796は、NULL使わない場合を想定した質問だぞ
データがない場合はNULLですだと、そもそもの質問の前提が成り立ってない
>820
>NULL使わない人はデータが無い状態をどうやって表現するのですか?
に対する答えとして派生関係を出してきたはずだが
>828
意図的にデータがない状態を記録するのに、NULLを使う手法はありかなしかって話をしてたんだと思うけど
そんな要件は現実的にあり得ないってならまあその意見もわからんではないが
実際のシステム設計じゃままある要件なんだがな

いい加減スレ違いなのは確かだし、これ以上は設計スレあたりで

833
NAME IS NULL[sage]   投稿日:2017/10/29 05:22:45  ID:???.net(701)
ちょっとした疑問なんだが、

ユーザーと所属するグループ、チームを表すテーブルを作る場合、カラムの命名についてはどっちが主流なんだい?

パターン1

テーブル:group_table
カラム:id,name

テーブル:team_table
カラム:id,name

テーブル:user_table
カラム:id,name,group_id,team_id

結合:

select
group.name as group_name,
team.name as team_name,
user.name as user_name
from
user_table as user
inner join group_table as group
on group.id=user.group_id
inner join team_table as team
on team.id=user.team_id

パターン2

テーブル:group_table
カラム:group_id,group_name

テーブル:team_table
カラム:team_id,team_name

テーブル:user_table
カラム:user_id,user_name,group_id,team_id

結合:

select
group.group_name as group_name,
team.team_name as team_name,
user.name as user_name
from
user_table as user
inner join group_table as group
on group.group_id=user.group_id
inner join team_table as team
on team.team_id=user.team_id

テーブル構成がおかしいとか、on句の書き方が気にくわないとか色々あるだろうけど、一先ず置いといて、
命名として、どっちなんだろうなと思って
コメント3件

834
NAME IS NULL[sage]   投稿日:2017/10/29 08:05:20  ID:???.net(701)
>836
JOINの結果NULLが現れるから回答になってないってのはさすが屁理屈が過ぎるだろう。
>796の前まではフィールドのNOT NULL制約について話していたわけだし、>796
それを踏まえた質問ととらえるのが自然。

835
NAME IS NULL[sage]   投稿日:2017/10/29 10:01:25  ID:???.net(701)
>833
どっちが主流かは知らんけど俺はパターン1
コメント1件

836
NAME IS NULL[sage]   投稿日:2017/10/29 22:04:41  ID:???.net(701)
>833
プライマリキーとそれ以外のカラムでは扱いが違う
プライマリキー以外のカラムにテーブル名を単純なプリフィクスとして使う人は少ない

プライマリキーについてはDBよりの人はuser_id派が多めな印象
アプリよりの人はid派が多い印象(言語やフレームワークにもよるが)

個人的にはuser_id派
コメント3件

837
NAME IS NULL[sage]   投稿日:2017/10/29 22:26:54  ID:???.net(701)
>835
>836
サンクス

後だしで悪いが、
idはpk、
pk以外のカラムについては、name以外の話はなしでおなしゃす。
(nameはこうするとかのみで)

話が膨らんでしまうと発散して意味を成さなくなるので。

ちなみに自分はパターン2派。
関連がが分かりやすいので。

けれども、パターン1でも、テーブル名から予測可能だし、そもそも関連については外部キーで定義しろよと思うので、思想の話かなと。

職場でも、両派いるので、時流はどちらなのか知りたい次第です

838
NAME IS NULL[sage]   投稿日:2017/10/29 22:27:51  ID:???.net(701)
id派は基本的に全テーブルのプライマリキーをidという名前にする前提なので
単に命名の問題じゃなく設計に関わってくる問題

この辺読んで両方の意見を参考にするといいと思う
https://softwareengineering.stackexchange.com/questions/114728/

idじゃなくbug_idにしようぜってのがSQLアンチパターンにも出てくる
コメント2件

839
NAME IS NULL[sage]   投稿日:2017/10/29 22:38:13  ID:???.net(701)
>838
サンクス

参考も読ませてもらうよ。

そんなあなたは、設計も命名も自由にできるとして、どっちにするの?
コメント1件

840
NAME IS NULL[sage]   投稿日:2017/10/29 23:49:53  ID:???.net(701)
>839

>838>836 と同一人物だよ
コメント1件

841
NAME IS NULL[sage]   投稿日:2017/10/30 00:29:10  ID:???.net(701)
>840
そうなんか。すまん。

842
NAME IS NULL[sage]   投稿日:2017/10/30 17:06:44  ID:???.net(701)
>833
状況によるんでどっちが主流とか無いんじゃね

ORマッパーとか前提で、IDやSQLをあまり意識しないでいいなら1

生SQL扱うなら、本来の考え方からいけば2だろうな
コメント1件

843
NAME IS NULL[]   投稿日:2017/10/30 21:20:22  ID:bh4tIMwn.net
SQL Serverの管理ビューは1で
Oracleのデータディクショナリは2だな
他のDBMSはどうだろう

844
NAME IS NULL[sage]   投稿日:2017/10/30 22:29:55  ID:???.net(701)
>842
なにそのオレオレ本来の考え方って?
コメント1件

845
NAME IS NULL[sage]   投稿日:2017/10/30 22:34:48  ID:???.net(701)
論理レベルで複合キーやナチュラルキーのテーブルを
物理レベルでどう扱いたいかが重要な分岐点
コメント1件

846
NAME IS NULL[sage]   投稿日:2017/10/31 02:45:10  ID:???.net(701)
>844
同じものには同じ名前をつける
違うものには違う名前をつける
これが原則

たとえば標準単価と販売単価を、同じ単価と言う項目名で定義するのはよろしくないだろ

ここ設計スレじゃないしこれ以上はどっか別のスレでよろしく
コメント2件

847
NAME IS NULL[sage]   投稿日:2017/10/31 06:28:26  ID:???.net(701)
>846
何で列名だけで判断してるんだ?
標準価格.単価 と 販売価格.単価 が同じものに見えるなら病院に行った方がいい
コメント2件

848
NAME IS NULL[]   投稿日:2017/10/31 07:03:48  ID:1FOujQPV.net
先入観に汚染されてるなw

849
NAME IS NULL[sage]   投稿日:2017/10/31 07:07:19  ID:???.net(701)
>847
なんだこのバカw
コメント1件

850
NAME IS NULL[]   投稿日:2017/10/31 11:39:03  ID:IzoEenp0.net(4)
>847
それはRDBの考え方ではない。

851
NAME IS NULL[sage]   投稿日:2017/10/31 13:26:32  ID:???.net(701)
そんな紛らわしいこと実務でやる奴いたら、とっちめられるぞ

852
NAME IS NULL[sage]   投稿日:2017/10/31 13:46:14  ID:???.net(701)
>846
何をもって同じとするのか
何をもって違うとするのかの基準が違うから
id派とuser_id派に分かれるんだよね

例えば各テーブルに内部的な管理用としてレコードの更新日時を記録する場合
最終更新日時とかの名前でどのテーブルも同じカラム名でも別におかしくない
レコードの更新日時という意味で同じだから
id派の考えはその延長
コメント2件

853
NAME IS NULL[sage]   投稿日:2017/10/31 14:13:44  ID:???.net(701)
create table T (
nk1 int PK, -- nk = Natural Key
nk2 int PK,
nk3 int PK,
nk4 int PK,
a int not null,
b int null,
c int null
)

create table TA (
nk1 int PK,
nk2 int PK,
nk3 int PK,
nk4 int PK,
a int not null
)

create table TB (
nk1 int PK,
nk2 int PK,
nk3 int PK,
nk4 int PK,
b int not null
)

create table TC (
nk1 int PK,
nk2 int PK,
nk3 int PK,
nk4 int PK,
c int not null
)

854
NAME IS NULL[]   投稿日:2017/10/31 14:48:11  ID:IzoEenp0.net(4)
>852
無理矢理すぎる理屈だな。

登録・更新者、登録・更新日時の項目は、結合項目として使用するなどどいう話は、あなたの中でもないだろうに。

855
NAME IS NULL[]   投稿日:2017/10/31 15:56:39  ID:HRkll2T3.net
そうかなあ
テーブル名もカラム名の属性を表してるわけで
テーブル名をテキトーにつけてなけりゃ
情報の一部だべ
コメント1件

856
NAME IS NULL[sage]   投稿日:2017/10/31 16:15:00  ID:???.net(701)
>標準価格.単価 と 販売価格.単価
テーブル名まで書くんだったら、最初から
>標準価格 と 販売価格
で良いんでは
コメント2件

857
NAME IS NULL[]   投稿日:2017/10/31 16:32:16  ID:IzoEenp0.net(4)
>855
テーブルの論理名はエンティティ名といって、適当に名前をつけていたら、混乱するだけでよいことはない。

858
NAME IS NULL[]   投稿日:2017/10/31 16:33:04  ID:IzoEenp0.net(4)
>856
彼はオブシェクト指向とごっちゃになっているのだろう。
コメント1件

859
NAME IS NULL[sage]   投稿日:2017/10/31 16:53:50  ID:???.net(701)
価格というテーブルがあって

商品:外部参照(商品マスタの主キーを参照)
適用開始:日付型
適用終了:日付型
区分:0:標準 1:販売
通貨記号:USD/JPY・・・
単価:通貨型

という感じに定義されていて
標準価格や販売価格が実はテーブルじゃなくて、
価格テーブルを元にしたビューだった

という風なら理解できるぞい
コメント2件

860
NAME IS NULL[]   投稿日:2017/10/31 19:43:13  ID:mnuaDWX/.net
>859
価格というテーブルには、
標準価格か販売価格のどちらかしか
入らなくなりませんか?

861
NAME IS NULL[sage]   投稿日:2017/10/31 21:27:26  ID:???.net(701)
user_id派は昔ながらのリレーショナルモデル、id派はERモデルの発想だろう。
そのへん区別できてない人も多いけどな。
コメント1件

862
NAME IS NULL[sage]   投稿日:2017/10/31 21:34:56  ID:???.net(701)
>849-850
爺は早めにくたばれよ w

>856
テーブル名書かないの?
単一テーブルしか扱わない時はいいけど複数テーブル使ってる時にテーブル名を書かないとかその方がどうかしてると思うけど

>858
はあ?
ひょっとして
ドットで繋いでる⇒オブジェクト指向
とでも思ってるのかよ w
全然関係ないだろ
コメント1件

863
NAME IS NULL[sage]   投稿日:2017/10/31 21:55:51  ID:???.net(701)
>859
そのケースで標準価格と販売価格を一つのテーブルで管理するメリットって何?

864
NAME IS NULL[sage]   投稿日:2017/10/31 23:26:42  ID:???.net(701)
>861
リレーショナルモデルとERモデルの違いについて、簡単にで良いので説明してくれ
コメント1件

865
NAME IS NULL[sage]   投稿日:2017/10/31 23:35:15  ID:???.net(701)
>862
>複数テーブル使ってる時にテーブル名を書かないとかその方がどうかしてる
複数テーブル使うときにテーブル名で「修飾」しないで済むようにしましょう、ってのが根本にあるわけで
そのためにjoinにusingとかあるんだが

まあなかなか現実的にはそうすると項目名がやたら冗長になったりするから適当なとこで妥協するんだけどね
個人的な感覚では
標準単価なんかは妥協する必要のない範疇
更新日時なんかは妥協して問題のない範疇
IDなんかが議論の分かれるとこなんでよく話題にされる

まあ、宗教論だよ
コメント1件

866
NAME IS NULL[sage]   投稿日:2017/11/01 00:15:01  ID:???.net(701)
>865
>標準単価なんかは妥協する必要のない範疇
>更新日時なんかは妥協して問題のない範疇

この線引を明文化して規約にしないと
同じデータベース内でブレた命名基準が使われて
一番使いにくい物ができあがる

867
NAME IS NULL[sage]   投稿日:2017/11/01 00:34:36  ID:???.net(701)
更新日時は文字通り誰が解釈しても一意になりそう
標準単価は、何を指すのかな?
商品なら、定価だったり、希望小売価格だったり
賃金なら、時間給か日給か月給?
その現場毎に決めるんだろうな

868
NAME IS NULL[sage]   投稿日:2017/11/01 00:50:55  ID:???.net(701)
>852に書いてるようなデータベース上のレコード最終更新日時と
ドメインで意味がある更新日時(サイト更新日時とかスレ更新日時とか)だと解釈違ってくるよね

システム的な事情で「スレ」テーブルのデータを更新した場合でも
ユーザーが目にするスレ更新日時は更新されない事も有り得る

869
NAME IS NULL[sage]   投稿日:2017/11/01 08:01:28  ID:???.net(701)
>864
先に属性があって、それらの間に何らかの関係が存在するときにそれをリレーション(テーブル)として
表現するのがリレーショナルモデル。属性はテーブル固有ではないのでそれ自身識別できる名前に
することが多い。
問題領域からエンティティを抽出してそれに含まれる属性を記述するのがERモデル。基本的に
属性はそのエンティティ固有のものだから他のエンティティと属性の名前が重複しても気にしない。
ただしERモデルをRDBに落とし込む際は他エンティティとの関係を表す参照フィールドが必要になる
場合があるが、これはそのエンティティに属するものとは言えないため必ずしも一貫性はない。

870
NAME IS NULL[sage]   投稿日:2017/11/01 11:14:37  ID:???.net(701)
c1,c2,...,c10と言う10個のカラムがあって、その中のどこかにkeywordが有るか判定するなら
c1 like %keyword% or c2 like ...
みたいに10個並べればいいですよね。
ではkeyword1とkeyword2が有るかどうか判定するなら同じくずらずらと条件を並べるしか無いですか?
もっとスマートに簡潔に書く方法は有りますか?
コメント3件

871
NAME IS NULL[]   投稿日:2017/11/01 11:35:10  ID:/cVJI5F/.net
>870
連結してしまう
コメント1件

872
NAME IS NULL[sage]   投稿日:2017/11/01 11:41:59  ID:???.net(701)
>871
なるほど。
実際の開発の現場でもそういう手法を使うんですか?
ずらずら並べる方法と連結する方法とでは、どっちが検索が速いでしょうか?

873
NAME IS NULL[sage]   投稿日:2017/11/01 12:58:59  ID:???.net(701)
LIKE検索の時点で似たり寄ったりだし
どうしても早くしたいなら全文検索エンジンとか使え
http://www.clear-code.com/blog/2015/5/25.html


874
NAME IS NULL[sage]   投稿日:2017/11/01 17:01:39  ID:???.net(701)
>870
クエリの見た目のキレイさだけならJOINの条件でLIKEを使う方法もある
パフォーマンスは一般的に良くない

外部結合使った例
SELECT *
FROM target t
LEFT JOIN keyword k1 ON t.c1 LIKE k1.col
LEFT JOIN keyword k2 ON t.c2 LIKE k2.col
LEFT JOIN keyword k3 ON t.c2 LIKE k3.col
WHERE k1.col IS NOT NULL
OR k2.col IS NOT NULL
OR k3.col IS NOT NULL ;

内部結合使う場合は結合条件をORでつないでカラムを並べるかUNIONするか
コメント2件

875
NAME IS NULL[]   投稿日:2017/11/01 20:23:03  ID:33PRYza3.net(2)
>870
そんなSQLが必要なテーブルがおそろしいわ。
コメント1件

876
NAME IS NULL[sage]   投稿日:2017/11/01 20:41:04  ID:???.net(701)
c1...c10が等価で交換可能なのだとしたらそもそも第1正規形じゃないから実際の開発の現場で見かけるのは稀。
等価じゃないのに「その中のどこか」なんて問い合わせするのも稀。
「実際の開発の現場」じゃまず現れないレアケースなんで「スマートに」なんて期待するな。
コメント2件

877
NAME IS NULL[]   投稿日:2017/11/01 21:12:22  ID:Rn9wp9k8.net
>875,876
正しい設計のデータベースにも普通にありふれたテーブルですよ
経験不足なんですねあなた達

878
NAME IS NULL[sage]   投稿日:2017/11/01 21:19:00  ID:???.net(701)
君のスルー力が試される

879
NAME IS NULL[sage]   投稿日:2017/11/01 21:19:46  ID:???.net(701)
自分が面倒見ているサイトで
ユーザーにアイテム検索させる時に
このようなSQL書いてるな

880
NAME IS NULL[sage]   投稿日:2017/11/01 21:29:21  ID:???.net(701)
結局それは全文検索系ってことだよね

881
NAME IS NULL[]   投稿日:2017/11/01 21:51:43  ID:33PRYza3.net(2)
そんな面倒なのを非手続き型SQLでやろうとする発想がすごい。

882
NAME IS NULL[sage]   投稿日:2017/11/01 21:52:04  ID:???.net(701)
>876
バカ設計はどこにでもある。稀じゃない。

883
NAME IS NULL[sage]   投稿日:2017/11/02 08:11:45  ID:???.net(701)
>876
例えば社員情報を氏名、役職、所属、電話番号、社員番号の一部で検索するとか普通にあるけど?

884
NAME IS NULL[sage]   投稿日:2017/11/02 09:50:05  ID:???.net(701)
>874
すみません、このコードを試してみたのですが外部結合など
初めてやるので実行するとエラーしました(SQL ServerとMySQL)。
このサンプルコードは、完全なSQL文ですか?
それとも概略を示したものですか?
コメント2件

885
NAME IS NULL[]   投稿日:2017/11/02 10:41:39  ID:t1XvRAES.net(2)
>884
SQLがいいか悪いかを無視しても少なくともLIKEの前にANDがない。

886
NAME IS NULL[sage]   投稿日:2017/11/02 11:25:24  ID:???.net(701)
ん?

887
NAME IS NULL[]   投稿日:2017/11/02 12:38:26  ID:SmP+Tevx.net
シンタックスすら覚束ないのに善し悪しを語りたがるバカw

888
NAME IS NULL[]   投稿日:2017/11/02 15:24:23  ID:t1XvRAES.net(2)
ああ、間違ってるな。

ただあのSQLのkeywordとはなんだろうな。

889
NAME IS NULL[sage]   投稿日:2017/11/02 16:17:17  ID:???.net(701)
>884
何をもって完全とするかは君にしかわからないけど
SQL ServerでもMySQLでも問題なく動くよ

外部結合もやったことなくて何のエラーが出たかも分からないようなら
自分の今のレベルを素直に受け入れてLIKEでベタ書きするのがスマートだと思うよ

890
NAME IS NULL[sage]   投稿日:2017/11/02 17:18:04  ID:???.net(701)
>874
ウンコード・マニアがSQLに対応していたらかなりいい点が貰えそう

891
NAME IS NULL[]   投稿日:2017/11/02 21:03:08  ID:4yCYhJnd.net
なんだかよくわからないけどとりあえず煽ってみるウンコバカw

892
NAME IS NULL[]   投稿日:2017/11/02 21:47:39  ID:441xfH76.net(2)
このスレは想像、想定で回答する人間が多くて驚く。エスパーなのか?

893
NAME IS NULL[sage]   投稿日:2017/11/02 21:49:27  ID:???.net(701)
マミだよん

894
NAME IS NULL[]   投稿日:2017/11/02 22:43:38  ID:441xfH76.net(2)
案外おっさんがいるんだな。

エスパー魔美を連想するとは。

895
NAME IS NULL[sage]   投稿日:2017/11/02 23:24:16  ID:???.net(701)
mongoDBってSQLよりも簡単ですか?
コメント1件

896
NAME IS NULL[sage]   投稿日:2017/11/03 00:00:10  ID:???.net(701)
>895
クエリ書くのはSQLのほうが簡単
MongoDBでクエリ書くのもそんな難しいわけじゃないけど
JavaScriptやmap/reduceの基本理解は必須

897
NAME IS NULL[]   投稿日:2017/11/03 00:58:43  ID:7zJOPvVT.net(2)
つまり簡単じゃんw

898
NAME IS NULL[sage]   投稿日:2017/11/03 02:53:53  ID:???.net(701)
簡単か難しいかは比較対象によるからね
SQLと比較すれば難しいし手間もかかる
SQLは全くの素人でも3日程度の研修受ければ
自分が欲しい結果を取得できるレベルにはすぐなれるが
JavaScriptだとそうはいかない
コメント1件

899
NAME IS NULL[sage]   投稿日:2017/11/03 03:03:46  ID:???.net(701)
SELECT cust_id, sum(amount)
FROM orders
WHERE status = 'A'
GROUP BY cust_id

上のSQLがmap/reduceだと↓ココにあるような関数になる
https://docs.mongodb.com/manual/aggregation/#map-reduce

他にもMongoでのクエリとSQLと比較してるドキュメントがたくさんあるから自分で見るといいと思う
https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/#examples

900
NAME IS NULL[]   投稿日:2017/11/03 06:42:27  ID:PR2/yxNu.net
スレ違い

901
NAME IS NULL[]   投稿日:2017/11/03 22:30:44  ID:7zJOPvVT.net(2)
つまり簡単じゃんw

902
NAME IS NULL[sage]   投稿日:2017/11/03 23:23:00  ID:???.net(701)
>898
3日でSQLマスターするってスゲえな
どうやるんですか?
コメント1件

903
NAME IS NULL[sage]   投稿日:2017/11/04 00:50:07  ID:???.net(701)
>902
マスターは言い過ぎ
文法を理解して自分が欲しい結果を取得するためのクエリが書けるようになるレベルな
ちゃんとした会社の研修コースを受ければいい

本で言えばスッキリのレベルなら2日コース
ゼロからはじめるのレベルなら3日コースが標準

904
NAME IS NULL[]   投稿日:2017/11/04 13:20:37  ID:isarshv7.net
なぜsqlもmongodbも初心者レベルなのに答えようとするのか

905
NAME IS NULL[sage]   投稿日:2017/11/05 16:51:50  ID:???.net(701)
select ...
where カラム名 like '%'
みたいなwhere条件を追加した場合、このwhere条件が無い場合に比べて
検索時間が遅くなったりしますか?
コメント2件

906
NAME IS NULL[sage]   投稿日:2017/11/05 17:16:14  ID:???.net(701)
そりゃDBMSのオプティマイザの賢さ次第だな。試してみればいい。

907
NAME IS NULL[sage]   投稿日:2017/11/05 17:19:00  ID:???.net(701)
>905
やってみなはれ。
やらなわからしまへんで。

鳥井信治郎

908
NAME IS NULL[sage]   投稿日:2017/11/05 18:19:41  ID:???.net(701)
で、遅くなったとして「じゃ条件つけるのやーめた」なんて出来るのか?

909
NAME IS NULL[sage]   投稿日:2017/11/05 19:19:45  ID:???.net(701)
クエリ組み立てる側で手間かければできないことないだろ。
もともと意味のない条件をつけるのがおかしいわけで。

910
NAME IS NULL[]   投稿日:2017/11/05 20:02:06  ID:Fhmg/FV8.net
>905
ただSQLだけで遅いの速いいうのはナンセンス。

911
NAME IS NULL[]   投稿日:2017/11/05 21:59:28  ID:TKSEwyxb.net
どんなSQLだけだったら遅いの速いのいうのはナンセンスじゃないんだこれ?

912
NAME IS NULL[sage]   投稿日:2017/11/06 00:52:25  ID:???.net(701)
質問させてください

番号     住所
(number)  (address)
 1      東京
 2      大阪
 3      東京

住所でGROUP BYして番号順に並べたい
さらに住所の合計を取得したい

SELECT *,SUM(address) FROM table_addr GROUP BY address ORDER BY number DESC;
これだと番号順に並びません。どうしたらいいでしょうか?よろしくお願いします。

913
NAME IS NULL[sage]   投稿日:2017/11/06 01:23:28  ID:???.net(701)
番号順って、小さい順にしたいの?それとも大きい順?
コメント1件

914
912[sage]   投稿日:2017/11/06 01:33:13  ID:???.net(701)
>913
レスありがとうございます
一応DESCですがASCでも構いません
コメント1件

915
NAME IS NULL[sage]   投稿日:2017/11/06 02:38:07  ID:???.net(701)
>914
SELECT MAX(number) AS number, address, COUNT(address) AS kensu
FROM table_addr GROUP BY address ORDER BY MAX(number) DESC;
コメント1件

916
912[sage]   投稿日:2017/11/06 10:18:12  ID:???.net(701)
>915
ありがとうございました

917
NAME IS NULL[]   投稿日:2017/11/06 12:54:15  ID:OvWu3ceL.net(3)
自作自演なのか?

なんでsumがカウントの間違いだとわかるのか?

918
NAME IS NULL[sage]   投稿日:2017/11/06 12:59:52  ID:???.net(701)
まあ住所の合計って意味わからんからな
よく気づいたと思うけど

919
NAME IS NULL[sage]   投稿日:2017/11/06 13:17:23  ID:???.net(701)
GROUP BY とORDER BYって同時にできるの?
コメント1件

920
NAME IS NULL[]   投稿日:2017/11/06 13:28:19  ID:OvWu3ceL.net(3)
>919
グループ化したものを並び替えることはできる。

並び替えたものをグループ化しても意味がない。
コメント1件

921
NAME IS NULL[sage]   投稿日:2017/11/06 14:14:19  ID:???.net(701)
>920
へえー
じゃあグループ化してないカラムを並び替えすることは出来る?

922
NAME IS NULL[]   投稿日:2017/11/06 14:16:34  ID:OvWu3ceL.net(3)
暇人だなw

923
NAME IS NULL[]   投稿日:2017/11/06 21:49:11  ID:m9a7sHg6.net(2)
笑ってごまかすんじゃない最後まで答えろ
コメント1件

924
NAME IS NULL[]   投稿日:2017/11/06 22:13:08  ID:nRwHbJxK.net
変なのがずっと居座っていたのか。

925
NAME IS NULL[]   投稿日:2017/11/06 22:36:12  ID:fjeBNiC4.net
>923
俺のスキルじゃ無理
コメント1件

926
NAME IS NULL[]   投稿日:2017/11/06 23:11:44  ID:m9a7sHg6.net(2)
>925
いやお前なら出来るはずだ

927
NAME IS NULL[sage]   投稿日:2017/11/12 08:40:38  ID:???.net(701)
SQLってcasesensitivitieじゃないんですよね?コマンドを小文字で書いても良いですか?
いちいちcapslock雄の面倒

928
NAME IS NULL[sage]   投稿日:2017/11/12 08:58:26  ID:???.net(701)
SQLって英単語の羅列で構造がぱっと見わかりにくいから、昔は予約語だけ大文字にするとかあったけど、
最近はエディタでハイライト(色分け)できるのが普通だから全部小文字でも全然問題ないな。

929
NAME IS NULL[sage]   投稿日:2017/11/12 09:13:40  ID:???.net(701)
小文字でも普通にオッケーなんですか

sqlite のクエリを書くのにpythonのIDE使ってるんでsintax highlightは効かないので見にくいかもしれない
一長一短すね
コメント1件

930
NAME IS NULL[sage]   投稿日:2017/11/12 11:08:21  ID:???.net(701)
使ったことあるのは oracle, SQL-Server, PostgreSQL, sqlite3, MySQL だけだけど、全部小文字でも問題なかったな

931
NAME IS NULL[]   投稿日:2017/11/12 13:00:50  ID:bx2ZtZM+.net
>929
初心者?

932
NAME IS NULL[sage]   投稿日:2017/11/12 13:04:49  ID:???.net(701)
一行に詰め込もうとかしなければ小文字でも読めるやろ

933
NAME IS NULL[sage]   投稿日:2017/11/12 14:09:18  ID:???.net(701)
英文(って言うかアルファベット)の大文字の綴りなんて、まず読みにくいだろ?

934
NAME IS NULL[sage]   投稿日:2017/11/12 14:14:09  ID:???.net(701)
大昔はコンソールから大文字しか打てなかった時代があった

935
NAME IS NULL[sage]   投稿日:2017/11/12 15:15:24  ID:???.net(701)
コボラーは今でも大文字なんだっけ

936
NAME IS NULL[sage]   投稿日:2017/11/12 15:30:51  ID:???.net(701)
COBOLも小文字
というかcase insensitiveやで

937
NAME IS NULL[sage]   投稿日:2017/11/12 15:32:09  ID:???.net(701)
COBOLは今は大文字小文字混じりだよ
FORTRANもね

SQLは特定の場所以外大文字小文字関係ない
内部では処理系によって大文字か小文字に変換して処理する

938
NAME IS NULL[]   投稿日:2017/11/13 20:56:12  ID:YzugWzEj.net
板違いかもしれませんが、hirdb詳しい方いませんか?いたらhirdbのストアドが使い易いか教えて下さい。使ってるのみたことなくて…
コメント1件

939
NAME IS NULL[sage]   投稿日:2017/11/13 21:07:17  ID:???.net(701)
うっわかわいそうに

940
NAME IS NULL[]   投稿日:2017/11/13 21:08:07  ID:Vp0kKm4r.net
>938
ネットに公表されているマニュアルを見たのか?
ストアドは標準SQLだから標準SQLとかけ離れていることはない。
コメント1件

941
NAME IS NULL[]   投稿日:2017/11/13 21:23:35  ID:vPFZRtjc.net
>940
みました。標準的にみえるけど、あまり使われてないDBMSだから落とし穴がないかこわくて。そもそも自分がそんなにストアド使ったことないから判断しかねるのもあります。
それと、過去ログにはトリガー設定して自動で動くようにはできない??との記述もあって…

942
NAME IS NULL[]   投稿日:2017/11/15 03:09:42  ID:0j2E8Ny1.net
sForm
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

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

このスレッドが人気です(実況系)
爆3 (883)TBS実況
大相撲九州場所 十三日目☆7 (987)NHK実況
実況 ◆ フジテレビ 84900 (824)フジ実況
NHK総合を常に実況し続けるスレ 140223 AI競技採点 (926)NHK実況
超問クイズ!真実か?ウソか?芸能界クイズ王決定戦!SP ★1 (289)NTV実況
ぴったんこカン・カン【ゲスト:吉田羊・江口のりこ/風吹ジュン】 ★1 (82)TBS実況
実況 ◆ テレビ朝日 50004 転ばぬ先のゆえ (357)テレ朝実況
情報ライブ ミヤネ屋★4 (969)NTV実況
このスレッドが人気です(ニュース系)
【朝日新聞】 サンフランシスコ市との歴史ある関係を捨ててまで、大阪市長がこだわるのはなぜか★6 (958)ニュー速+
【米国】サンフランシスコ市長 慰安婦像問題で吉村市長の面会要請拒否 「交渉、議論の余地はない」★3 (749)ニュー速+
【将棋】羽生善治棋聖 永世七冠に王手!!・・・第30期竜王戦 (663)音楽・芸能ニュース
【乳児連れ議場】 BBC 「日本での男女性差は大きく開いたままだ」 「男女格差、日本は144カ国中114位だ」 (1002)ニュー速+
【調査】正社員不足、過去最高の49.1%に上昇 (438)ニュー速+
【相撲】旭鷲山「貴ノ岩はモンゴルに帰れない」★4 (811)音楽・芸能ニュース
【テレビ】<ホリエモン>井筒監督を猛批判!「こういう人、大嫌い! 人間として最低だよ」 (593)音楽・芸能ニュース
【米国】サンフランシスコ市長 慰安婦像問題で吉村市長の面会要請拒否 「交渉、議論の余地はない」★2 (1001)ニュー速+
データベース板の人気スレ
Oracle 質問総合スレ13 (229)
SQL質疑応答スレ 17問目 (942)
PostgreSQL Part.11 (404)
MySQL 総合 Part26 (70)
Oracle 質問総合スレ9 (986)
MySQL 総合 Part24 (1010)
Oracle 質問総合スレ10 (1014)
SQL質疑応答スレ 15問目 (1013)
Microsoft SQL Server 総合スレ 11 (563)
はじまりです。 (585)
XML統合スレッド (397)
だれかみずほ銀行のDBを直してやれよ (54)
この板が生き残るために (58)
新しい板の名前を決めるスレ (63)
SQLite Part.10 (650)
♪つっかもうぜ!DB! (122)
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からデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 新着書き込みなし(304)