TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
CSVファイルのスレ
ここはデータベース板です
彼女にINSERT権限がありません
DB設計を語るスレ 10
[終了]今は亡きInformixに文句を言うスレ[おつかれ]
ADO.NETの質問・雑談スレ2
Oracle 質問総合スレ9
DBのキャラ、ここが好きだ!
数十メガバイトのファイルをどんどん格納できるDB
DB板のみんなでUDやるぞ!

SQL質疑応答スレ 18問目


1 :
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。

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

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

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

前スレ:
SQL質疑応答スレ 17問目
https://mevius.2ch.sc/test/read.cgi/db/1468157341/

2 :
過去スレ
17問目:https://mevius.2ch.sc/test/read.cgi/db/1468157341/
16問目:http://echo.2ch.sc/test/read.cgi/db/1447160858/
15問目:http://peace.2ch.sc/test/read.cgi/db/1402919549/
14問目:http://peace.2ch.sc/test/read.cgi/db/1371476534/
13問目:http://toro.2ch.sc/test/read.cgi/db/1343899481/
12問目:http://toro.2ch.sc/test/read.cgi/db/1316769778/
11問目:http://hibari.2ch.sc/test/read.cgi/db/1299305530/
10問目:http://hibari.2ch.sc/test/read.cgi/db/1274791771/
9問目:http://pc11.2ch.sc/test/read.cgi/db/1252492296/
8問目:http://pc11.2ch.sc/test/read.cgi/db/1236253554/
7問目:http://pc11.2ch.sc/test/read.cgi/db/1223525474/
6問目:http://pc11.2ch.sc/test/read.cgi/db/1210940477/
5問目:http://pc11.2ch.sc/test/read.cgi/db/1193486961/
4問目:http://pc11.2ch.sc/test/read.cgi/db/1176553195/
3問目:http://pc11.2ch.sc/test/read.cgi/db/1160458216/
2問目:http://pc8.2ch.sc/test/read.cgi/db/1141622643/
帰ってきた:http://pc8.2ch.sc/test/read.cgi/db/1124178925/
Part 2:http://pc8.2ch.sc/test/read.cgi/db/1103113155/
初代:http://pc8.2ch.sc/test/read.cgi/db/1056973582/

3 :
よくある質問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
;

4 :
よくある質問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
;

5 :
よくある質問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によって文法がかなり違うので注意

6 :
よくある質問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/statements_10002.htm#CHDCEJJE
http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html

7 :
ダメだ
ブロック条件が厳しすぎる
誰か残りのFAQを貼ってくれ

8 :
よくある質問5

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

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

   20100601
   20100602
    ・
    ・
    ・
   20100630

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

9 :
よくある質問5

with TEMP (NUM) as (
    select 1 from dual
    union all
    select NUM + 1 from TEMP where NUM < 31
)
select to_char(to_date('201006', 'YYYYMM') + NUM - 1, 'YYYYMMDD')
from TEMP
where to_date('201006', 'YYYYMM') + NUM - 1 < add_months(to_date('201006', 'YYYYMM'), 1)
;

※上記はOracleの場合です。(11gR2以降)
※再帰問合せをサポートするDBMSならこれを適当に改変すれば動きますが
 どのみちお奨めしません。

10 :
よくある質問5 (後半の訂正)

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

with TEMP (NUM) as (
    select 1 from dual
    union all
    select NUM + 1 from TEMP where NUM < 31
)
select to_char(to_date('201006', 'YYYYMM') + NUM - 1, 'YYYYMMDD')
from TEMP
where to_date('201006', 'YYYYMM') + NUM - 1 < add_months(to_date('201006', 'YYYYMM'), 1)
;

※上記はOracleの場合です。(11gR2以降)
※再帰問合せをサポートするDBMSならこれを適当に改変すれば動きますが
 どのみちお奨めしません。

11 :
いちおつ
generate_series()関数がダメみたいだな

12 :
前スレ971の回答でも貼っとくか

select T5."T3_ID"  "ID",
    T5."T3_日付" "日付",
    T5."T3_値"  "値",
    T5."T4_日付" "求めたい日付"
from  (select T3."ID"   "T3_ID",
        T3."日付"  "T3_日付",
        T3."値"   "T3_値",
        T4."T2_日付" "T4_日付",
        row_number() over (partition by T3."ID", T3."日付" order by T4."T1_日付" desc) "日付順"
    from  "TableName" T3
        left outer join
        (select T1."ID"  "T1_ID",
            T1."日付" "T1_日付",
            T2."日付" "T2_日付",
            row_number() over (partition by T1."ID", T1."日付" order by T2."値" desc) "値順"
        from  "TableName" T1
            inner join
            "TableName" T2
            on T1."ID" = T2."ID"
            and T2."日付" between add_months(T1."日付", -12) and T1."日付"
        ) T4
        on T3."ID" = T4."T1_ID"
        and T3."日付" > T4."T1_日付"
    where T4."値順" = 1
    or  T4."値順" is null
    ) T5
where T5."日付順" = 1
order by 1,2,3
;

13 :
なるほど
全然速そうだな

14 :
なんでそんな変なのばっかりなの?
ソートが頭から離れないのか。

15 :
>>13
パーティション切ってrow_numberで先頭行だから
オプティマイザの出来次第だけどパフォーマンスに大差はないと思うけど
相関サブクエリとjoinなら同じ実行計画はいたりするし

>>14
はいはい
どうせ正解は書かないんじゃなくて書けないんでしょ

16 :
なんというレベルの低さ

17 :
>全然速そうだな

変な日本語を何とかしろよ

18 :
>>15
>>3 を見たのか?

19 :
mysqlでサブクエリを asに代入するとき、常に1カラムしかasできないため
サブクエリだらけになってしまうのですが、これをスマートに1サブクエリとかで取得できませんでしょうか?

SELECT
(
 SELECT
  max(num)
 FROM
  sub_table
) as max_num ,
(
 SELECT
  min(num)
 FROM
  sub_table
) as min_num,
(
 SELECT
 avg(num)
 FROM
  sub_table
) as avg_num
FROM
main_table
↑main_tableに sub_tableの min max avgを盛り込もうとすると
サブクエリだらけになってしまう。

20 :
これでそのSQLと同じ意味にはなる
何がしたいのかはよくわからんが

select sub.*
from (select max(num) as max_num,
       min(num) as min_num,
       avg(num) as avg_num
   from  sub_table
   ) sub
   cross join
   main_table
;

21 :
>>20
ありがとうございます!!

22 :
自作自演?

23 :
どうしてそう思ったの?

24 :
感謝ぐらい好きにさせてやれよ歪んでるなあ

25 :
明らかに情報不足なのに情報を補完して回答しているからな。

26 :
それはキミ、情報不足やない、キミの知識不足やろ。

27 :
>>26
メインテーブルとサブテーブルの結合条件がクロスジョインとは普通、思わない。

28 :
>>27
> メインテーブルとサブテーブルの結合条件がクロスジョイン
え?

29 :
>>19のSQLがクロスジョインだと思えないのは知識不足としか言いようがない

30 :
>>20は何も補完」してないだろ。逆に>>19の意味不明な部分はそのまま字面通り解釈して回答してる。

31 :
>>29
main_table と「sub_table」の cross join だと思ってるなら知識不足以前の話かとww

32 :
やりすぎ防犯パトロール、特定人物を尾行監視 2009年3月19日19時7分配信 ツカサネット新聞
http://headlines.yahoo.co.jp/hl?a=20090319-00000026-tsuka-soci

この記事で問題になった通称やりすぎ防パトは、創価学会と警察署が引き起こしていたようです

掻い摘んで説明すると

・創価学会は、町内会や老人会、PTA、商店会等の住民組織に関し、学会員が役員になるよう積極的に働きかける運動を
 90年代末から開始し、結果、多くの住民組織で役員が学会員という状況が生まれた

・防犯パトロールの担い手は地域の住民と住民組織で、防犯活動に関する会議や協議会には、住民組織の代表に役員が出席する為
 防犯活動や防パトに、創価学会が間接的に影響力を行使可能となった

・防パトは住民が行う為、住民が不審者や要注意人物にでっち上げられるトラブルが起きていたが
 創価学会はその緩さに目をつけ、住民組織を握っている状況を利用し、嫌がらせ対象者を不審者や要注意人物にでっち上げ
 防パトに尾行や監視、付き纏いをさせるようになった

・防パトは地元警察署との緊密な連携により行われる為、創価学会は警察署幹部を懐柔して取り込んでしまい
 不審者にでっち上げた住民への嫌がらせに署幹部を経由して警察署を加担させるようになった

・主に当該警察署勤務と考えられる創価学会員警察官を動かし、恐らく非番の日に、職権自体ないにもかかわらず
 私服警官を偽装させて管轄内を歩いて回らせ、防犯協力をお願いしますと住民に協力を求めて回り
 防犯とは名ばかりの、単なる嫌がらせを住民らに行わせた(防犯協力と称し依頼して回っていた警察官らの正体は恐らく所轄勤務の学会員警察官)
 ※これに加えて防犯要員が同様のお願いをして回る

・こうして防犯パトロールを悪用し、住民を欺いて嫌がらせをさせつつ、創価学会自体も会員らを動員し、組織的な嫌がらせを連動して行った

つまり警察署に勤務する学会員警察官、警察署幹部、創価学会が通称やりすぎ防犯パトロールの黒幕

詳細は下記スレをご覧下さい
やりすぎ防犯パトロールは創価学会と警察署の仕業だった
https://rio2016.2ch.sc/test/read.cgi/bouhan/1516500769/

33 :
質問です
以下のようなTableAとTableBをTableAのIDで結合して、

1. TableBに特定のKEY(ここではKEY=2)が含まれているならそのデータを、
2. 含まれていなければ若いKEYのデータを、
3. KEYそのものが存在しなければNULL

を返す結果を取得したいです
どのようなSQLなら実現しますか?


「TableA」
ID | NAME
--+-------
1 | aaa
2 | bbb
3 | ccc
4 | ddd

「TableB」
ID2 | ID | KEY | DATA
--+----+-----+-----
1 | 1   | 1    | a_key1
2 | 1   | 2    | a_key2
3 | 1   | 3    | a_key3
4 | 2   | 1    | b_key1
5 | 2   | 2    | b_key2
6 | 3   | 1    | c_key1
7 | 3   | 3    | c_key3

「結果」
ID | NAME    | ID2 | DATA
--+---------+----------
1 | aaa | 2    | a_key2
2 | bbb | 5    | b_key2
1 | ccc | 6    | c_key1
3 | ddd | NULL | NULL

34 :
訂正

「結果」
3 | ccc | 6    | c_key1
4 | ddd | NULL | NULL

35 :
>>33
SQL-Server なら
select T.ID as ID, T.NAME as NAME, T.ID2 as ID2, T.DATA as DATA
from (
select
row_number() over (
partition by TableA.Id
order by
case TableB.[KEY]
when 2 then 0 else 1
end,
TableB.[KEY] asc
) as R,
TableA.ID as ID,
TableA.NAME as NAME,
TableB.ID2 as ID2,
TableB.DATA as DATA
from TableA left join TableB on TableA.ID = TableB.ID
) T
where T.R = 1

36 :
>>35
ありがとうございます
使用しているのはMariaDB 10.1でしたが(書き忘れ失礼しました)、頂いた解答をヒントに試してみます

37 :
>>36
う〜ん、MariaDB使ったことないけど
https://mariadb.com/kb/en/library/row_number/
を見るとrow_number()は10.2.0以降でないとダメみたい
10.2.0には上げられないの?

38 :
>>37
こちらもちょうどそこに行き着いてました
バージョンを上げることは可能なので最新版にアップデートして試してみようと思います
わざわざ調べて頂き感謝します

39 :
☆ 日本の、改憲をしましょう。現在、衆議員と参議院の両院で、
改憲議員が3分の2を超えております。『憲法改正国民投票法』、
でググってみてください。国会の発議はすでに可能です。
平和は勝ち取るものです。お願い致します。☆☆

40 :
SQLがなかなか覚えられません
SELECT が先頭に来るのは覚えていますが、
次がFROMか、WHEREか迷ったりします
なにか覚えやすい方法ってありますか?

41 :
暗記

42 :
>>40
順番はきっちり決まってるから覚えれば迷うことはない
それすら覚えられないならマやめた方がいい

43 :
>>41-42
ありがとうございます
覚えます

44 :
集計で、nullがあれば0で、nullが1つもない場合は最大値や最小値を取ってくるような書き方ってないでしょうか?

45 :
>>44
CASE式で

SELECT c1,
CASE (SELECT count( * ) FROM t1 AS a WHERE a.c1 = b.c1 AND c2 IS NULL)
WHEN 0 THEN sum(c2)
ELSE 0 END
FROM t1 AS b
GROUP BY c1

設計見なおしたほうがいいパターンだと思う

46 :
少し違うやり方だけどこっちのほうがパフォーマンスはいいかも。

SELECT c1, CASE sum(c3) WHEN 0 THEN sum(c2) ELSE 0 END
FROM (SELECT c1, c2, CASE WHEN c2 IS NULL THEN 1 ELSE 0 END AS c3 FROM t1) AS t2
GROUP BY c1
ORDER BY c1;

47 :
>>45 >>46
ありがとうございます!
後者の方が問い合わせが少ない感じで良さそうですね。

48 :
uelect文を2つ書いてunion allの方がよっぽど可読性が高い。

49 :
union言いたすぎてuelectになっちゃう奴カワユスw

50 :
>>48
その可読性が高いやつ提示しなよ

51 :
uelectあるじゃん

52 :
ウェレクト

53 :
セレクト 0 as カラム別名 from テーブル名 group by グループ列名 having 列名 is null
union all
セレクト max(カラム名) as カラム別名 from テーブル名 group by グループ列名 having 列名 is not null

54 :
uelectになるのにビビってセレクトになっちゃう奴カワユスw

55 :
いつもSQL書かずに意味不明なイチャモンだけつけてた人が
珍しくSQL書いたと思ったらやっぱり意味不明なSQLじゃんか
havingの意味分かってないんだろうな

56 :
>>55
おい勘違いするな
いつも意味不明なイチャモンつけてるアゲは俺だ
アゲだからといってバカと一緒にされては困るなw

57 :
union all期待してたのに。。。こんな結果なの??

>>45のやつはCASE WHEN EXISTSにしたほうがよかったね

58 :
SEなんだが殆ど要件定義とか折衝が主担当だから
SQLの知識があんまりなくていつも効率悪い調査の仕方だったりベンダーさんに投げてしまったりになってしまうんで質問させてください
使用しているのはoracle SQLです。
下みたいなAテーブル、Bマスタがあって
Aテーブル(トラン)
no 名前 上長名前 日付

Bマスタ
名前 社員番号 適用開始日 適用終了日

【抜き出したい情報】
・Aテーブルに1つもない(名前、上長名前)人員の情報(Bマスタの名前、社員番号)
・Aテーブルの名前、上長名前に1以上トランが発生している人員情報、発生件数(名前、上長名前で分ける)

を抽出したい場合はどうすればよいでしょうか?
実業務ではベンダーさんからの報告で解決したのですが次からは自分でも頑張ってみたくて勉強したのですが実際に書こうと思うと全く上手くいきませんOTL

59 :
>>58
とりあえず自分の思うように書いてみ

60 :
>>59
すみません構文もめちゃくちゃだし途中まで書いてわからなくなっちゃったのですが
上から一つ目
select B.名前,B,社員番号 from Aテーブル A inner join Bマスタ B
on A.名前 = B.名前 or A.上長名前 = B.名前
where
A.日付 between B.適用開始日 and B.適用終了日
 
ってとこまで書いて挫折してしまいました・・・・・
COUNT、EXISTSを使えばよさそうだなとは思うのですがどうでしょう?
ちなみに2つ目のはまったく見当もつかない状況です・・・・

元は営業職で今期から情報部に異動してきて勉強はしてるのですがまったくわかりません・・・
本職SEの方の文の書き方の考え方のコツなんかも教えていただけるとうれしいです

61 :
>>55
having に集計関数と書かずにカラム名と書いたら、見事にそこだけ問題視するんだな。

セレクトと書いているのもSQLインジェクション対策に引っかかるため。

62 :
セレクト 0 as カラム別名 from テーブル名 group by グループ列名 having グループ列名 is null
union all
セレクト max(グループ名) as カラム別名 from テーブル名 group by グループ列名 having max(グループ名) is not null

63 :
曖昧質問に対して勝手な想像で要件を決めつけて答えるのはよくない。

そもそもSQLをずばり教えてくれというのが間違い。

64 :
>>57
select句にselect文を書くのを推奨するな。

65 :
>>60
あなたが書いているとおりに書けばよい。

なぜ一つのSQLでいきなりやろうとするのか?

66 :
>>60
3パターンの整理をせよ。

67 :
>>60
それあなたのいう1つ目もできていない。
少なくともそのSQLにこだわりがあるのなら、内部結合ではなく外部結合しなければ、1つ目も達成できていない。

68 :
>>62
ここで動かしてみてくれよ
そういうクエリでも動くDBMSがあるんならぜひ知りたい
http://sqlfiddle.com/#!17/05796a

69 :
>>64
なんで?

70 :
順当にバカが発狂しとるなw

71 :
>>60
1. SQLの研修を受ける
2. 最小限のテストデータを作成して試行錯誤を繰り返す
3. 少し高度なクエリをWebや書籍で学ぶ

まず1と2をやること(>>58のやつはSQLの研修を受講すれば解決できるレベル)
基本的なクエリは問題なく出来るようになってから3に進む
3はミックのブログやセルコの本がおすすめ

72 :
あと要件定義が主な担当なら
SQLの書き方よりもDB設計を学んだほうが役立つ度合いが大きいよ

73 :
>>58
http://sqlfiddle.com/#!9/81ab8/1

2つめはfilter句が使えるDBもあるけど普通はCASE式かな

74 :
>>71
SQLの受講は予定してるけど・・・
ここってそういうの教えてくれる板じゃないの?
勉強法なんて聞いてないんだが

75 :
こいつはクズだね〜w
営業をお払い箱になって情シスでもお荷物だな

76 :
簡単に解決できるレベルとかいって勉強法講釈たれる奴もどうかと思うがな

77 :
>ベンダーさんに投げてしまったりになってしまうんで
とか言ってるやつがこのスレに投げるだけになるんだぜ
鬱陶しいだろ

78 :
問題を解くコツを教えてもらおうとする前に基礎を学べってことだろ
内部結合や外部結合は算数で言えば四則演算レベルの基礎なんだからさ

79 :
教えたがりのくせに質問には答えたくないてどないやねんw
そのややこしい承認欲求どうにかしろやw

80 :
>>60だけど
やっぱりSEって気持ち悪いな
ベンダー嬲り倒すことにしたわ
てか早く答えろやwwwPGしかできないアホなんだからこれくらいすぐ答えだせwwwwww

81 :
答え出てるだろww

82 :
>>81
どこが出てるんだよwwwwww
やっぱSEって頭おかしいのしかいないのなwwwwww

83 :
おまえマジかww
回答してくれた気持ち悪いエス・イーさんの親切心台無しだなww

84 :
困ったら黙っちゃうSEさん達現実でも2ちゃんでも同じなんだね・・・・・

85 :
>>44
これでもいける
select c1,
case when count(*) = count(c2)
then max(c2)
else 0
end
from t1
group by c1
order by c1

86 :
>>85
そんな答え出てるものより60でも答えたれや

87 :
60も答えでとるやん

88 :
>>87
それではその答えを31文字以内で示しなさい。

89 :
>>87
どこにでてんだよwwwwww
あほかよSEさんwwwwww

90 :
二人もおるんかww
インターネッツの使い方も知らないんやなwwwププッ

91 :
箇条書きの条件それぞれのsqlつくればいいのか?
それなら簡単じゃね

92 :
簡単じゃねえ!

93 :
これは「SQLの研修行け」の人が正解だったな

94 :
>>93
バカはお口にチャックで

95 :
>>92
どの辺が簡単じゃないの?

96 :
こんな簡単な SQLも教えられないとかゴミしかいないんだなここ
そりゃ営業上がりに馬鹿にされるわけだわ

97 :
>>96
簡単なSQLだからこそ

98 :
ほらこの答え出るまで
俺居座るからなはやくだせや
他のやつ質問すんなよこれが最優先だから

99 :
お前が質問してからのレスを全部読み返せよ、ゴミ

100 :
簡単なSQLすら理解できない人に教えるとか無理ゲーやろ

101 :
>>100
じゃあ誰に教えんだよw

102 :
>>100
お前最高にアホだな

103 :
>>101
>>102
お前ら池沼にSQL教えられんのか?

104 :
>>58
Bを取り出すSQLを考える
select b.* from b
存在する社員をだす
 exists (select 1 from a where a.名前=b.名前)
本来欲しいのは逆なんだから
select b.* from b
where not exists (select 1 from a where a.名前=b.名前)

105 :
かけ算も割り算も分かってないやつが
四角形と三角形の面積の求め方を教えろと質問してるのと同じ状況なんだよな

かけ算も割り算も分かってないってことが分かってないレベルなら
かけ算がよくわからないので教えて下さいって言えるところまでは最低でも自力で勉強すべき

106 :
例えが全然的を射てないんだよなあ
かけ算と SQL同列に語って池沼に教えるのと同じってw
お前の方がどうかと思うぞ 部下とか後輩から嫌われてない?w

107 :
>>106
ガイジキタ━━━━(゚∀゚)━━━━!!

108 :
悩める教えたがりクン>>105
愛くるしいよぅ〜wwww

109 :
うわっ今どきキターとか使わないで
恥ずかしいから辞めた方がいいよ

110 :
>>105
このスレ否定しちゃったよwwwwww
アホかwwwwwwお前は2度とここ見なくていいからwwwwww現実で偉ぶってろやwwwwww
みーんなおまえのこと嫌いだろうけどwwwwww

111 :
>>109
キタ━━━━(゚∀゚)━━━━!!

112 :
>>109
キタ━━━━(゚∀゚)━━━━!!

113 :
内部結合/外部結合はかけ算/割り算レベル
それが分からないから難しいと思っちゃうんだろね

114 :
なんで教えてくれたやつをまたスルーしてんの?

115 :
>>114
どんだけお礼欲しがりなんだよw
はいはいありがとうございましたwwww

116 :
ちょっとまて誰だ教えてくれたやつって?
何嘘ついてんだよ騙されたじゃねえか

117 :
>>115
そういうことじゃないだろw

118 :
リアルでよほど抑圧されてんだな
ガンバレよ

119 :
>>104
答えになってないが?
あほ?

120 :
>>118
PGSEさんは作業するだけだもんねー
大変だなあwww応援してるよ!頑張ってよ!

121 :
>>118
お前が頑張れよw

122 :
SQL初心者スレ状態

123 :
>>122
SQL初心者スレみたいな質問にもまともに答えられる奴が1人もいないってどうなん?

124 :
>>123
データベース板は過疎板だから。いるのはインフラ屋ばかりでSQLはよくわからない。

125 :
回答出てるのにレスが池沼だからスルーしてるだけだろ

126 :
なんか俺のふりして頭おかしい人っぽく印象操作してるゴミSEがいるみたいだなトリップ付けとくわ

127 :
>>126
で、回答はわかったの?

128 :
>>127
1つ目の質問はこれでできると思うが
2つ目の質問が答え出てないぞ

129 :
104答えたの俺だけど60バカみたいで何も考える気が無いみたいなんで
2つ目答えようとおもったけどやめるわ

130 :
正直にできませんでしたってかけや

131 :
別にせんでもいいのに2ちゃんでまで出来ない言い訳をしてしまうバカ正直なバカかわゆすw

132 :
教えてくださいっていったらおしえてあげる

133 :
お前みたいななんの特徴も個性もないゴミSEが名前つけなくていいからね^ ^
名無しに戻って2度と戻ってくんなよ^ ^

134 :
1週間もたってこの程度解決できない奴って
うちの会社だったらありえないわ
去年入った新人ですら余裕で解決できるぞ
やっぱ能力無いやつっているんだな

135 :
>>134
な!こんな簡単な問題も解けないとか民度低すぎるわここ
あ!俺はもう SQLなんて民度低い言語勉強するのやめたからお前ら頼むな!

136 :
その能力ない奴に使いっぱにされるSEさん可哀想・・・・・
SEやめよ

137 :
>>135
それぞれの名前、上長と結合したカウントをselect句に書けばいいだけだが
それすらかけないんだろw
添削してやるからかいてみろ

138 :
このスレのスルー力のなさは民度低すぎと言われても仕方ないレベル

139 :
>>138
御託はいいから書いてみろよw
添削してやるって言ってるだろw

140 :
懲りずにまた他人を語るやつw

141 :
ウェレクト臭がするわ

142 :
ウェレクトまだやっとったんかw

143 :
俺と他人を混同してるようだな。

144 :
なにコイツ有名人気取りかwwwww

145 :
などとウェレクトが申しており

146 :
何意味わかんねえ事のたまわってるのお前ら
DB板とかいう糞過疎板とか初めて来たんだがなんだよその恥ずかしいコテ
いいから早く答えだけ書けばいいんだよ

147 :
>>145
あん?あんま調子に乗るなよウェレクトくん?オコっちゃうよオレ

148 :
ずぼしウェレクトw

149 :
データベースのquery limit 75,000って何でしょうか?
ワードプレスを利用していますが、query limit 75,000を超えたとかで表示が制限されてしまいました・・・。

1時間で75000人以上はアクセスできないということでしょうか?
また、今後このようなエラーが起きたいために何かできることはないでしょうか?
不要なプラグインは既に削除しています。

よろしくお願いいたします。

150 :
>>149
スレチ
WordPressのスレへどうぞ

151 :
いえ、でもmysqlの問題でもあるんですが・・・。

152 :
ググれゴミ
今は俺の答え出るまで他の質問受け付けてないから

153 :
>>151
MySQLの問題でもないから
ホスティング会社に問い合わせてね

154 :
>>152
ウェレクトは黙ってて

155 :
>>152
お前、何様?
勝手に仕切んなボケ

156 :
【ゴチ大杉漣(66)】 小森常務゜:(つд⊂):゜「致死量の放射能を放出しました」 【ブルマ鶴ひろみ(57)】
http://rosie.2ch.sc/test/read.cgi/liveplus/1520303016/l50

157 :
うっせえSE如きが意見してんじゃねーよ
はやく答えろやゴミ
ってみんな思ってるからな?wwwそういうふうに思いながら仕事しろよ?wwwwww

158 :
そろそろ飽きてきたから俺が答えちゃおうかなwいいのか?お前ら?w

159 :
はやく答えろや

160 :
アホコテはngにしてるからどうぞお好きに

161 :
でたー!wwwwww
NGにしてるで勝ち誇ってるやつwwwwww

162 :
>>160
ウェレクトは黙っとけまた恥かくぞ

163 :
>>162
君がウェレクトじゃないのか?

164 :
・SQLインジェクション対策はシングルクォートを空白に置換すればOK
・テーブルで年月のみを入れる項目は文字列型で定義
この辺を論破できないので悲しい...

シングルクォートなんてデータ入れねーよ m9(^Д^)プギャー
年月のみならサイズを小さくできるよといわれる

165 :
いろいろヤバイなそれ

166 :
>>164
ここ君の日記帳じゃないよ
さようなら

167 :
年月を文字型にすると
・比較相手によってはキャストが必要
・範囲チェックが働かない
・容量が増える

逆に年月を文字列型にするメリットって何かあるの?
あと速度的なとこも気になるね

168 :
>>164
いまどき数バイト削るためにコンピュータの数値型を使うのは時代錯誤。しかもリレーショナルデータベースでは文字として出力するのが優先だから文字表現でデータを格納するのが基本。

169 :
釣り針がデカすぎ

170 :
え、え〜〜!?
これは救いようもなくヤバイ

171 :
疑心暗鬼すぎる>>169かわゆすw

172 :
疑心暗鬼? w

173 :
気持ち悪い話してないではやく>>60答えろやごみども

174 :
多くのゴミの中でも本当にゴミと言えるのは>>172だけやでw

175 :
>>167
int型の項目値を文字列に変換する方がはるかに負荷が大きい。

176 :
正直なそんな低レベルなDB設計してる奴がいるとこで働いてるお前がかわいそうだわ
んでそんな話どうでもいいから早く質問答えろな?

177 :
年月は数字項目にしといたほうがトラブルが少ない。整合性チェックにもなる
文字列にして文字が入ってたりすると日付形式に変換する時エラーになる

178 :
>>167
キャストが必要というのもコンピュータの数値型を使っていても、最終的には文字列に変換する。

年月の同士の計算が膨大にあるのであれば理解できなくないが、日付項目同士の比較は日付型で行う。

コンピータの数値表現で扱ってしまうと、まず日付型に変換し、実在しない年月や、1ヶ月前、1ヶ月後、月末日等の特定に2段階のキャストが必要になる。

現実には存在しない年月を生み出してしまうリスクまでとる必要がない。

何度も言うが年月の単純計算などほぼないうえに、文字列に大小判定は気にせず、コンピータの数値ばかりこだわるのはリレーショナルデータベースを理解していないどころか、コンピータを理解していない。

179 :
いつもの人ですねー
お薬出しときますねー

180 :
>>60の簡単なSQLも書けないアホが何言っても滑稽なだけですよ^ ^

181 :
>>174
>>170 w

182 :
一人で勝手にint型や数値型を持ちだしてそれを的外れな長文で否定w
文脈を理解してないどころか、一般常識を理解していない。

183 :
バカ必死やねw

184 :
  ★★★根税制による格差解消は、赤犬を根絶しユダヤ支配を永遠に終わらせる為の決め手である。★★★

▲  この掲示板(万有サロン)に優秀な書き込みをして、総▲額148万円の賞金をゲットしよう!(*^▲^)v
  http://jbbs.livedoor.jp/▲study/3729/ →リンクが不良なら、検索窓に入れる!

185 :
>>175
>>178
いつもCPU100%にしちゃうから勉強になります!!

186 :
それはSQLの書き方がおかしいんだろ

187 :
ホントに文脈も一般常識も理解してないのな

188 :
統計情報も取らないアホ集団で仕事してるのはわかったから
はやく俺の質問答えてや^ ^

189 :
>>185
CPUは使うものですよ。

190 :
>>188
統計情報はユーザーが取るものではないぞw

191 :
訳のわからんツッコミにさすがの神もタジタジの様子w

192 :
MySQL (InnoDB) で ALTER TABLE をする際の振る舞いとしてテーブル単位のロックではなくインスタンス全体をロックしているような挙動を示しています
innodb_file_per_table を疑ったが ON だったのですが何が問題なんでしょうか

193 :
>>192
MySQLスレへどうぞ

194 :
>>192
追記:
原因の切り分けが非常に難しく、 AWS RDS を利用しているからこうなっているのか、
それともこの挙動が発生したインスタンスに大量のデータベース・テーブル(150万テーブル以上)が存在していることが問題なのか、
他に見落としている条件がないかを調査している。

195 :
テーブル数150万てwどうしてそうなったw

196 :
>>194
MySQLの問題だからねそれ。
あと今質問打ち切ってるよ?

>>195
150万って別に普通だと思うが?アホ?

197 :
ああごめんね。テーブル数150万はないわ。
どんな教育受けてきたん?
はいこの話終わり早く答えて

198 :
>>197
お前は教育受けてないだろ

199 :
>>198
そうだね教えを請うたことないわ
いっつも享受する側だわ
スキーマテーブルレコードカラムの違いがわかんないアホがこのスレ使ってんなや!

200 :
まだ居座ってるんだ
このかわいそうな人

201 :
間違いを指摘された途端にブチ切れ始めた

202 :
「指摘したって言う奴の指摘は大体間違っている」の法則

203 :
意味不明

204 :
>>203
こんな簡単なSQLも作れないの?
仕事辞めた方がいいんじゃない?

205 :
SQLの事だと思い込んでいる事も意味不明

206 :
>>205
きみ本当のあほみたいだから2度とこないでね

207 :
>>206
150万テーブル作ってろゴミクズ

208 :
>>206
お前生きてる価値無いからR

209 :
>>207
書き間違えまで揚げ足取るってやべえなここの民度

210 :
>>196
150万テーブルwww

211 :
普通そんな所書き間違えるなんてしないよ

212 :
>>210
お前あほ?俺に安価つけてんなよゴミSEが

213 :
読み間違えた挙句にアホ呼ばわりする人間が民度を語るなよ。みっともない奴だな。

214 :
>>213
君名前欄も読めないメクラさんかな?
民度どうこうなんて言ってないんだけど?
文体から伝わってくるんだけど加齢臭口臭やばいでしょあなた?

215 :
>>212
あら「普通」の概念が破綻してる方がまたいらっしゃった

216 :
あら「普通」の概念が堅固なバカがまたいらっしゃった

217 :
>>214
ごめんなさい

218 :
>>216
自己紹介おつ

219 :
select A1,A2 from tableA
select B1 from tableB

これをそのまま流すと結果は2行になりますが、
これをA1,A2,B1と1行でとる方法はないでしょうか

220 :
書き忘れましたが、どちらも1行しか返さないSQLです

221 :
>>219
それぞれの実行結果が1行しかないなら

select tableA.A1, tableA.A2, tableB.B1 from tableA, tableB;

222 :
>>221
なるほど、ありがとうございます

223 :
MysqlがすぐおちるのですがMariaDBにすれば改善されるのでしょうか?

よく出るエラーメッセージはこんなやつです。
mysqli_set_charset(): Error executing query in DBのURL

MariaDBはMysqlに比べてどのぐらい優れているのかもわからないので教えていただければ幸いです。

224 :
>>223
おそらくデータベースに設定している文字セットで不整合があるんだろうと思いますが
MySQLの設定方法に関する質問の場合は、ここで聞くよりも、
MySQL 総合 Part26
https://mevius.2ch.sc/test/read.cgi/db/1499949595/
で聞いた方が良いかと思います。

MariaDBに関するスレもあります。覗いてみると良いかもしれません。
https://mevius.2ch.sc/test/read.cgi/db/1360677476/

225 :
誤爆かもな

226 :
with句で取得した数列を別のテーブルでその数列と一致するレコードを取得したいんだけどどうすればいいでしょう?
withで別で取得したリスト名Aとし取得結果がBだとすると
select ※ from X
where X.C IN (SELECT B FROM A)
で取得しようとしたんだが上手くいかずいろいろとぐぐってみたけどわからなかったです・・・

227 :
DB名も書けないとか

228 :
withで別で取得したってのが意味わからん
その部分を含めてどうやろうとしたのか書けば答えようもあるが

229 :
すみません。書き方が悪かったです。
使用しているのはoracleです。
with A AS (SELECT X FROM Z
GROUP BY X)
SELECT COUNT(※) FROM B
WHERE B.C IN(SELECT X FROM A)
のような文を書いてエラーとなりました。
イメージ的にはZテーブル上のXの数列についてBテーブルに何件存在するかを確認したいです。

230 :
参考書でも開けばそんくらいわかんだろゴミ
早くお前ら答えろや
スレチの質問には誘導して俺の質問には答えないって根性捻れまくりだろお前ら

231 :
「Xの数列」という説明が他人には理解できない。

Xがひとつの列だとするとなぜグループ化なのかわからない。

さらに再帰クエリにして、別のSELECT文のINリストのSELECT文にしているのも意図がくみにくい。

かなり単純なことを聞いていると予想はできるが、なぜこんなに難しく考えているのか?

232 :
本当に>>229の通りに書いているならcount(※)がcount(*)の間違いだが
それ以外に致命的な間違いは見当たらない
まあこう書いても同じ意味にはなる
select count(*) from B inner join Z on B.C = Z.X;

233 :
>>231
再帰クエリーないけど?

234 :
再帰のないWITHを再帰クエリと呼ぶなということか。

ただOracleは再帰があってもなくてもただWITHと書いて、再帰のないWITHと言ったりするからそう書いた。

標準SQLではWITH RECURSIVEと書かないといけないが、Oracleはたしかこの構文がない気がする。

235 :
他人のミスに厳しいならそう自己紹介してくれ。

236 :
ではまずご自身からどうぞ

237 :
やあ、俺

238 :
>>232
B.CかZ.Xの少なくともどちらかがユニークでないと同じ意味にはならん

239 :
このスレはSQL入門スレなのかSQLオタクスレなのか?

よくわからない質問に、エスパー回答をするというIT技術者の間ではあまりないやりとりが多い。

240 :
テンプレ見ろゴミ
ここは初心者用スレだよ
なのに俺の質問は基礎的すぎるとかいう謎老人のおかげで誰も答えんのや
まじでゴミSEは右ならえの自我すら持たない穢多非人よ

241 :
いつまで粘着してんだ、このキチは

242 :
>>239
IT技術者の間ではよくわからない質問によくわからない回答をして
お互い納得するのがデフォルトスタンダードですものねw

243 :
ここはわざと言い間違えるスレか?

244 :
まず質問者が無礼。回答者がとりあえず想像で回答。これがこのスレが機能していない理由。

245 :
>>240
初心者向けであれば、SQLを回答するのではなく、何をしようとしているのを確認するのが先です。できればいい論をデータベース板で確認するのはおかしいので、プログラム板やプログラマ板で質問すべきです。

246 :
>>245
わかったわかったお前の意見とかどうでもいいわ
文体見るだけで中年のごみおっさんってわかるわやばいよ君?

247 :
匿名の掲示板で誰でも書き込めるんだから
気に入らなければスルーすれば良いだけ
質問者が無礼って、お前に害悪を加えてきたわけじゃあるまいし

248 :
助けてください。
ACCESSのDBなんですが、
tblAは、[id][なまえ][電話番号][性別][入会日]というフィールド構成のマスター名簿
tblBは、[id][入金日][入金額]というフィールド構成です。

このテーブルを元に、ACCESSやEXCELのVBA上で、

[id] [なまえ] idごとの[入金額]の合計 WHERE 昨日=<[入金日] <= 明日

というレコードセットを取得したいです。
tblBの集計に、tblAからもってきたなまえフィールドをくっつけたい、という感じです。
INNER JOINとか、そういうのを駆使して、なんとかひとつのSQL文を作りたいのですが、
うまくいきません。
どなたか、SQL文そのものをご教示ください。
お願いします。

249 :
>>248
このままだとよくわからん
「誰が」入金したという情報はどこで管理しているの?

250 :
>>249
すみません。idというのは、メンバーidのことです。レコードidではありません。
わかりづらくてすみません。

メンバー(マスターで、idから名前がわかる)による入金の記録がBテーブルです。
それぞれのメンバーが、合計でいくら入金したのか、を集計したいのですが、
Bテーブルにはidしかなく、集計表には名前も欲しいので、Aテーブルから持ってきたいのです。

251 :
>>250
君質問する以前の問題だよ?
あと今質問受け付けてないからばいばい

252 :
>>250
えーと
同じ日に2件以上の入金はないということ?

253 :
>>252
ありえます。
なので、SUM[金額] GROUP BY id としたいです。

254 :
>>253
そもそもテーブル設計がまずいのでは
同じ人が同じ日に同じ金額を入金したらどうなるの?
主キーは?

255 :
Bテーブルにはオートナンバーのridフィールドがあります。

256 :
GROUP BY [id],[なまえ]

257 :
>>248
Accessは知らんが一般的なSQLではこんな感じ

select A.id,
    A.なまえ,
    B.合計
from  tblA A
    inner join
    (select id,
        sum(入金額) as 合計
    from  tblB
    where  入金日 between 昨日 and 明日
    ) B
    on A.id = B.id
;

258 :
サブクエリ内にgroup by id書くの忘れた

259 :
>>248
accessで作ってやったぞ
これでどうだ。

SELECT tblA.ID, tblA.[なまえ], Sum(tblB.入金額) AS 入金額の合計
FROM tblA INNER JOIN tblB ON tblA.ID = tblB.ID
WHERE (((tblB.入金日)>='2018-04-06' And (tblB.入金日)<='2018-04-08'))
GROUP BY tblA.ID, tblA.[なまえ]
ORDER BY tblA.ID;

260 :
>>259
ありがとう!

261 :
【シオンの議定書は反日】 『マス・レジャーとクイズを盛んに』 『あなたは極めて優秀だから寝返れ』
http://rosie.2ch.sc/test/read.cgi/liveplus/1523323225/l50

262 :
>>4 のよくある質問2で、keyに別テーブル?配列?を指定することはできますか。
(key=3など、BDにない項目のカウント結果は当然ゼロになるが、それも結果として欲しい)

1〜12の数値(月)で集計するとか、47都道府県をキーとするとか、
ニーズはありそうなので方法もあるように思うのですが。

DBは、Google Fusion Tablesです。

263 :
>>262
具体的にテーブルの内容を例示してみて

264 :
outer joinのことを言いたいんだと思う

265 :
OUTER JOIN? …慌ててググる…そうそうそれです!

Google Fusion TablesはWHERE句で関数が使えないなどSQLはやや貧弱なのですが、
OUTER JOINはあるようなので(LEFTだけ?)勉強してやってみます。
ありがとうございました。
https://developers.google.com/fusiontables/docs/v2/sql-reference

266 :
おいおいおいおいouter joinとかいう初心者以前の質問には答えて
俺の質問には答えんのかい
お前らほんと捻くれてるな
これだからSEとかいうオタク共はいじめたくなるんだよなあ

267 :
>>58
専門学生の宿題だろこれ?

268 :
>>266
答えられんのはプログラマーとかゆうコーダーだろ
SEとゆうのは俺様みたいな有能のことたぜボーイ!

269 :
>>268
you?

270 :
>>269
なんや?SE様に何か用か?

271 :
テーブル分割してidなどで紐付けるのが基本なのは分かるんですけど
この値がどのidなのか毎回自分でテーブル確認してinsertするのが大変で困ってます
リストボックスみたいなので'ゆうちょ'を選んだら(bank_id=)3みたいに支援してくれる機能ってSQLでできませんか?
RDBMSはMySQLでLinuxのターミナル使ってます

272 :
それはSQLではなくWeb画面等使って選択させれば良いだろう

273 :
>>271
SQLの話ではないな。

274 :
ACCESSでも使ってろ

275 :
>>271
IDを使わず銀行名でやってみてください。

自分が経験しなければ、なぜそうした方がいいのか、わかりませんよ。

276 :
>テーブル分割してidなどで紐付けるのが基本なのは分かるんですけど

それは分かってるっていうよりメリットデメリット理解しないまま鵜呑みにしてるだけだよね。
どうせ鵜呑みにするなら教科書通りのリレーショナルDB設計から入ればいいのに。

277 :
更新時のレコード件数を減らしたり情報の集約・一元化がメリットですよね。ざっくりとは理解してるつもりです。
ただターミナルからSQLで複数のレコードを追加するには自力でテーブル確認する必要あるのが使いづらいなと思って

278 :
select bank_id from m_bank where bank_name = ’ゆうちょ’

こんなサブクェリーを追加SQLに埋め込む

279 :
>>278
こういうときに副問合せ使うんですね、使いやすそうで凄く良さそう。
早速使ってみます。
ありがとうございます。

280 :
マスタテーブルではないのか?

281 :
>複数のレコードを追加するには自力でテーブル確認する必要ある

これの意味が判らん

282 :
説明下手ですみません。
初心者なのですごく初歩的な質問でした。
取り敢えずサブクエリで解決しましたが一応

habook:
id, money, method_id
...
135, -5000, 58
...

method:
method_id, method_name
...
58, 'ゆうちょ銀行'
...

INSERT INTO habook VALUES (200, -1000, ???)
method_idが多くてゆうちょ銀行のidがパッと思い出せなくて詰まる
methodテーブルを自分で確認してソニー銀行のidを調べてinsertに打ち込む

同じような感じで外部キーの列が増えるとインサートする度に自分で調べる必要があって大変になってきたのでなにかいい方法ないか聞きました。


混乱させてすみません。

283 :
使用しているのはoracle SQLです。
下みたいなAテーブル、Bマスタがあって
Aテーブル(トラン)
no 名前 上長名前 日付

Bマスタ
名前 社員番号 適用開始日 適用終了日

【抜き出したい情報】
・Aテーブルに1つもない(名前、上長名前)人員の情報(Bマスタの名前、社員番号)
・Aテーブルの名前、上長名前に1以上トランが発生している人員情報、発生件数(名前、上長名前で分ける)

を抽出したい場合はどうすればよいでしょうか?

284 :
学校の宿題みたいな設問だな

285 :
>>282
自分でそういうプログラムを作ればいい。

286 :
>>284
トランザクションデータをトランと略しているあたりから、どこかの会社だろう。

287 :
同姓同名には考慮しなくて良いの?

288 :
>>283
外部キーが社員番号ではなくて名前なのはネタだからか?

289 :
>>282
どのぐらいの頻度でSQL使うかわからんけど、こんなのでもいいんかね
insert into habook(id, money, method_id)
select 200, -1000, method_id from method where method_name='ゆうちょ銀行'

290 :
>>283
>>58と同じみたいなんだが、いまだにわからないのかw

291 :
銀行は銀行名の変更とか合併とかあるから
そういった事も考えないといけない

292 :
お前らはどうしても俺の質問には答えたくないみたいだな

293 :
頼み方ってものがあるだろ
ほら言ってみろ

294 :
コメントが一杯付いてて良かったじゃないか

295 :
下みたいなAテーブル、Bマスタがあって
Aテーブル(トラン)
no 名前 上長名前 日付

Bマスタ
名前 社員番号 適用開始日 適用終了日

【抜き出したい情報】
・Aテーブルに1つもない(名前、上長名前)人員の情報(Bマスタの名前、社員番号)
・Aテーブルの名前、上長名前に1以上トランが発生している人員情報、発生件数(名前、上長名前で分ける)

を抽出したい場合はどうすればよいでしょうか?

296 :
>>295
同じ名前の社員がいたとき、どうすれば良いの?

297 :
結婚とか離婚して姓名変わったらどうすんだ

298 :
もうここしか頼るところがございません。
SQL server7.0が、綺麗にwin10のPCだけつながらなくなりました。
「接続できませんでした。 SQL state'ST100'
SQL server エラー0
[microsoft][ODBC SQL server driver] ログインが時間切れになりました」
と出ます。どうすればいいのでしょうか

299 :
>>298
20年前の製品とか捨てちまえ

300 :
>>296
>>297
それぐらい自分で考えろ

301 :
>>298
ああこれはログインが時間切れになってるね
ログインが時間切れにならないように注意しなよ

302 :
>>298

なんでこの板まで来て

Microsoft SQL Server 総合スレ 11 [無断転載禁止]&#169;2ch.sc
https://mevius.2ch.sc/test/read.cgi/db/1464508208/

に行かないの?

303 :
外部キーって必ず他のテーブルの主キーじゃないとダメなの?

304 :
主キーでなくてもUNIQUE制約がついていれば大丈夫だと思う

305 :
>>303
>>304
これ自分も知りたいからageてみるか

306 :
>>303
一意制約の列でもよい。要は重複値を持っている列では外部キー制約に使用できない。

307 :
>>304
>>306
ありがとうございますm(_ _)m

308 :
DB殆ど触ったことないので分からないのですが、
1. SQLでは[ユーザー名, パスワード, [データA], [データB]] (便宜的にリスト形式にしています)
のようなDB構造は作れるのでしょうか?

つまり、ユーザー名とパスワードは1ユーザに1つずつ、データA,B,C、、、は内部に複数のデータを持つような構造です
ちなみに扱いたいSQLはpostgreSQLです

2. node.jsとpostgreSQLを使ってウェブアプリを作ろうと思っているのですが、postgreSQLでは最初にDB構造の宣言などはしなくて良いのでしょうか?

Swift + RealmでDBを使った際には、ユーザーモデルっていうDB構造?を宣言してから使ったので、少々混乱しています

3. node.jsとpostgreSQL(npmで)をWindowsにインストールしたのですが、postgreSQLが動きませんでした
WindowsにもpostgreSQLをインストールしなければいけないのでしょうか?


よろしくお願いします

309 :
MySQLです。数値を計算するSQL文ってあるでしょうか?

例えば、rankingテーブルに「access」と「click」というカラムがあるとします。
accessは×1でclickは×5にして、その合計数値が多い値(降順)で表示

みたいなことがしたいです。

310 :
>>308
まずはDBを触りましょう
SQLではと書いているということは他ならわかるのでしょうか
RDBでは一般的に
[ユーザーID,ユーザー名,パスワード]
[ユーザーID,データ番号,データ]
のようなテーブルを作成してユーザーIDで結合します
これを正規化といいます

>>309
素直に
order by (ranking.access + ranking.click * 5) desc
でいけるかと

311 :
SQL初心者です。
連続して1が立っている時間
(行数、データ数)は求められないでしょうか。
1が出てきたタイミングで後どれだけ続くかをその行に書き込みたいです。

312 :
>>310
いけました!orderに計算するって概念がありませんでした。
とても勉強になりました。ありがとうございます

313 :
>>311
どういうテーブル、イメージしてるデータの並びを書かないとレスつかないんじゃないか

314 :
>>313
ありがとうございます。

A B
0 0
0 0
1 3
1 0
1 0
0 0
0 0

AからBを作りたいです。
Bの3は1が3つ続いていることを意味します。

315 :
>>314
順序も規定せずに 「続いてる」とか言われてもなあ
Excel + VBA とかでやれば?

316 :
>>314
連番がなければsql では無理

317 :
>>315
>>316
No A B
0 0 0
1 0 0
2 1 3
3 1 0
4 1 0
5 0 0
6 0 0
7 1 2
8 1 0
9 0 0

例えばこの様な連番が有れば出来るものでしょうか。

すみません。
SQLで出来るのか?
出来るならどのような方法が有るのか
知りたいです。

よろしくお願いします。

318 :
>>317
これで
2 1 3
7 1 2
がとれたらいいわけ?
時間っていってたわりにはそういう結果をかいてないが

319 :
あとDBは何かしりたい

320 :
最新の(つまりinsertする前の)NoでAが1で、かつ追加するデータのAが0だったら
直前のAが0のデータのNoを見る
例ならNoが9の時に0になったから直前のAが0のデータはNoが6だと。
んで、7,8が連続したものだった
だからNo7のBに2をセット

こんな感じ?

321 :
>>318
分かりにくく申し訳ありません。
元々時系列のデータだったので
時間という書き方をしていました。
(何個続いたか知りたいのです)

NOとAの項目がある状態でBの項目
を追加したいと思っています。

318様のような結果でも構いません。

>>319
MSのSQL Serverです。申し訳ありませんが詳細なバージョンなどは不明です。

>>320
ありがとうございます。
書かれているようなことが
実現できればと思います。

322 :
>>317
SQL文でやるならレコードを次々と参照しないといけないから再帰SQL使わないとだめだろうな
あるいはプロシージャでカーソル使う
あるいはプログラムでやる感じになる

323 :
SQL Serverでなく、MySQLです、済みません。テーブル名はtと仮定しました。

create procedure setB()
begin
 declare done int;
 declare _flag int;
 declare _cnt int;
 declare _a int;
 declare _no int;

 declare cur cursor for select No,A from t order by No desc;
 declare exit handler for not found set done = 0;
 set done = 1;
 set _flag = 0;
 set _cnt = 0;
 
 open cur;
 while done do
  fetch cur into _no, _a;
  if _a = 1 and _no > 0 then
   update t set b = 0 where No = _no + 1;
   set _cnt = _cnt + 1;
  else
   update t set b = _cnt where No = _no + 1;
   set _cnt = 0;
  end if;
 end while;

 if _a = 1 then
  update t set b = 0 where No = _no;
 else
  update t set b = _cnt where No = _no;
 end if;
 close cur;
end;

324 :
>>322
ありがとうございます。
教えていただいたキーワードをもとに
調べてみます。

>>323
ありがとうございます。
今はPCをさわれる環境にないので月曜日に試してみたいと思います。

325 :
>>322
再帰やストアドなんて要らんでしょ
>>318 の結果を得たいだけなら

select
 T1.NO, T1.A,
 (
  select min(T3.NO) as NO
  from T as T3
  where T1.NO < T3.NO and T1.A <> T3.A
 ) - T1.NO as [連続数]
from T as T1
inner join T as T2 on T1.NO - 1 = T2.NO and T1.a <> T2.a
where T1.A = 1

で十分でしょ (わかると思うけど表名は T ね)

326 :
>>325
ありがとうございます。
試してみます。

327 :
再帰SQLでやるならこんな感じ
最初に1がでたところで表示したいとのことなので
レコードの最後から加算積み上げてる
半角でレスしようとしたらインジョクションかなんかでエラーになった
ため全角に変換してます

WITH CTE AS (
SELECT NO,A,A AS B 
FROM TBL AS M

UNION ALL 
SELECT M.NO ,M.A ,S.B + 1 AS B −−Bを1で積上げていく
FROM TBL AS M
inner join CTE AS S
on  M.NO = S.NO −1 −−レコードの後ろから参照
and S.A = 1
and M.A = 1

), [WK1] AS (
SELECT NO,A,max(B) as B −−Bが積上開始位置により別々の数字になっているので最大値でサマリー
FROM CTE AS M
GROUP BY NO,A


SELECT M.NO,M.A,case when S.A = 0 then B else 0 end B −−前のレコードがゼロの時のみBを表示
FROM [WK1] AS M
LEFT JOIN TBL AS S
on M.NO −1 = S.NO 
ORDER BY M.NO

328 :
>>325
>>327
ありがとうございます。どちらも思ったような結果が得られました。
>>323
ありがとうございます。
今回は動かせていませんが、MySQLをさわる機会に試してみます。

4月末よりSQLを使わなければいけなくなり、困っていました。
皆さんに教えていただいた方法を理解し自由にSQLが書けるよう頑張ります!

329 :
教えて下さい。

下記の表Tに於いて
NO,START,STOPが与えられているとき
KEKKAという行を得たいです。
良い方法があれば教えてください。
(STARTからSTOPの間に1を立てたい)
DBはMicrosoft SQL Serverです。

NO START STOP KEKKA
1 0 0 0
2 0 0 0
3 1 0 1
4 0 0 1
5 0 0 1
6 0 1 1
7 0 0 0
8 0 0 0

よろしくお願いします。

330 :
>KEKKAという行を得たい

????????

331 :
>>330
わかりにくくてすみません。
KEKKAという項目は元のデータにはなく、この項目を生成したいです。

332 :
STARTとSTOPは1件ずつしかないのか?

順序はNO順でいいのか?
NOは連番なのか?

333 :
START、STOPは必ず1レコードあり、複数はない
って事なら、簡単なSQLで処理できそう

334 :
>>332
STARTとSTOPは複数あります。
NO順です。
NOは連番です。
STARTが1である行とSTOPが1である行は必ず交互に来て、
STARTとSTOPが同時に来ることはありません。
STARTが1の行とSTOPが1の行は続くことがあります。
STOPが1の行の直後にSTARTが1の行が来る場合もあります。
STARTが1の行の数とSTOPが1の行の数は同じです。
NO順に先頭から見ていくと、STARTが1の行は、STOPが1の行より先に出現します。

よろしくお願いします。

335 :
>>334 で何をやりたいかはだいたいわかったけど
(たぶん STARTしてからSTOPするまで KEKKAを1にすればよいはず)
行順を保持しつつ状態遷移させるのって普通のSQLでできるのだろうか?

336 :
START、START、STOP、STOPって並びになったときはどうすんの?

337 :
334見てなかった、すまん

338 :
>>334
スタートがあったら1加算ストップがあったら1減算する累積計算すればいいじゃねえ
select no sum( start + end * -1) as kekka from t as m
left join t as s
on t.no<=m.no
group by no

339 :
>>338
いろいろ細かいミスは置いといて、それSTOPの行が1にならんだろ

>>329
select NO,START,STOP,
(select isnull(sum(START),0) from t where t.NO <= m.NO)-
(select isnull(sum(STOP),0) from t where t.NO < m.NO) KEKKA
from t m
とかで出来んじゃね

340 :
ありがとうございます。
皆さんに教えていただいた方法を試していますが、うまく行きそうです。
ありがとうございました。

341 :
・DBMS名とバージョン
10.1.16-MariaDB

・テーブルデータ
テーブル:categories
cateid  catename   
----------------
1     c1
2     c2
3     c3
4     c4
5     c5
6     c6
7     c7
8     c8

テーブル:books
cateid  bookname price
--------------------
1     b11     20
1     b12     10
1     b13     30
1     b14     40
1     b15     5
2     b21     20
2     b22     10
2     b23     30
2     b24     40
2     b25     5


・欲しい結果
cateid   catename bookname price
--------------------------------
1     c1      b14     40
1     c1      b13     30
1     c1      b11     20
2     c2      b24     40
2     c2      b23     30
2     c2      b21     20

・説明
categoriesとbooksをcateidで結合。結合の順番はbooksのpriceの降順とし、更にその結合する数の上限を3としたいのですが、どういうSQLになりますか?

ちなみに↓のようなSQLを思いつきましたが上手く行かず・・・
SELECT *
FROM categories
    LEFT JOIN (SELECT * FROM books ORDER BY price DESC LIMIT 3) books
    ON (books.cateid = categories.cateid)
priceでのソートはできてるんですが、LIMITが期待通りには機能しませんでした
まあそれもそのはず・・・これではbooksテーブル全件の上位3件を拾ってこいというクエリですからね

342 :
select
 t1.cateid, catename, t1.bookname, t1.price
from books t1
join category c on c.cateid=t1.cateid
where 3 >= (
 select count(*)
 from books t2
 where
  t1.cateid = t2.cateid and
  t1.price <= t2.price
)
order by cateid, price desc;

343 :
>>342
できました!ありがとうございます!

344 :
table data_pool
code bb_date   baibai  suuryou
111  2018/04/01   3  2000
111  2018/04/03   1  1000
222  2018/04/05   3  1000
222  2018/04/09   3  2000
333  2018/05/01   3  5000

(PK code + bb_date)
baibai 1 売り 3 買い
月単位で集計するときにbaiba=1はマイナスとして集計し
111  2018/04  1000
222  2018/04  2000
333  2018/05  5000
のような結果を得たいのですがどう書けばいい?(mysql)

345 :
間違い
222  2018/04  3000
です

346 :
こういう時に間違える人って

347 :
おっちょこちょいなんだろうな
> baiba=1
とか書いてるし w
でも、欲しい結果をちゃんと書いてるのはいいことだと思う

MySQLはよく知らんけど
select
code,
date_format(bb_date, '%Y/%d'),
sum(
case baibai
when 1 then -suuryou
when 3 then suuryou
end
)
from data_pool
group by code, date_format(bb_date, '%Y/%d')
とかで行けるんじゃね?

348 :
date_format の所、%Y/%m だな。
2カ所直せば大丈夫だろう

349 :
重ね重ねの間違いお恥ずかしいw
有難うございます
%d を %m にして欲しい結果を得ることが出来ました。感謝

350 :
毎日の果物の価格を記録するデータベースを作りたいんですがどういうテーブルをつくったらいいですか?とりあえずitemsテーブルに果物の種類とidのカラムを作ります。
毎日の価格はどういうテーブルにしたらいいですか?

351 :
>>350

DB設計を語るスレ 10 [無断転載禁止]&#169;2ch.sc
https://mevius.2ch.sc/test/read.cgi/db/1495438711/

まぁ叩かれるとは思うが…

352 :
>>351
スレチでしたかすんません

353 :
DB設計を語るスレ 10
https://mevius.2ch.sc/test/read.cgi/db/1495438711/

聞くなら、こちらの方が良いかもしれない

354 :
被ってしまった、すまん

355 :
>>354
ありがとうございますそっちで聞いてみます、

356 :
まあどっちの住人もたいして変わらんからここでも良いとは思うけど
> 毎日の果物の価格を記録するデータベースを作りたいんです
とか意味がわからん
そのデータベースでどう言うことをしたいいのか、とかどういう結果が欲しいのかを書けよ...

357 :
またバカがごねとるw

358 :
クリエ通知ってどうやるの?

359 :
relatedなカラムにむこうのテーブルにないものをinsertすると勝手に登録してくれますか?

360 :
しばらく考えてしまったが
やはり意味が分からなかった
誰か解説頼む

361 :
リレーションで外部キーに存在しないものを挿入したら
どうにかしてくれるのかってことだべ
制約にならんと思うんだが、、、トリガで自分で追加するようにすればいけるかもね

362 :
皆さんがアンケートの答えを格納するテーブルを作るとしたら
未回答は、nullを想定しますか?0を想定しますか?
理由も教えてください!

363 :
>>362
こちらでどうぞ

https://mevius.2ch.sc/test/read.cgi/db/1495438711/

364 :
>>361
on insert cascade か。他のカラムはどうすんだろ

365 :
null なり default 値なりにするんだろ

366 :
主キーはどうするんだ

367 :
>>366
identity とかでいいだろ
てか insert と同じだろ

368 :
自動採番のあるテーブルにインサートした場合、その番号を知るには別途selectするものですか?

369 :
そもそも自動採番ってSQL標準じゃない気がするし
DBMSによるんじゃね

370 :
>>368
普通は採番された番号を取得する機能が提供されてる
でないと単純なログみたいにその番号以外の部分には重複を許す列しかないと検索しようがないから

371 :
>>368 です。
自分の使うデータベースで探したらありました。
自動採番ってあるの普通だと思ってたので勉強になりました。

372 :
こういう常時、一人しか使っていないと思っているひとは、なんなんだろうな。

373 :
こういう常時、で読点打つキチガイはバカなんだろ、うな。

374 :
バカだからイミフなんですね

375 :
n+1問題ってなんやねん

パフォーマンス低下したら何がいけないの?

376 :
何回もデータ分だけ引くの何がいけないの?
ハードが優秀なら別にいいんじゃないないの?

377 :
それでええんやで

378 :
助けてください。自分の力量だと解決できず

データ
日付,オーダ番号,個人名.エラーA,エラーB,エラーC
0601,00001,タナカ,エラーA発生,,
0601,00002,イトウ,,エラーB発生,
0601,00003,サトウ,,,エラーC発生
0602,00004,タナカ,エラーA発生,,
0602,00005,イトウ,エラーA発生,,
0602,00006,スズキ,エラーA発生,,

このとき、個人別にエラー回数の内訳を出したいのです。
個人名, エラー1回目, エラー2回目, エラー3回目,…
タナカ,エラーA,エラーA,,
イトウ,エラーB,エラーA,,
サトウ,エラーC,,
スズキ,エラーA,,

使用DBはMYSQLですがストアドは使えないという制約があり
エラー回数は動的に延ばせればという要望がありますが、5回で止めてもOKです。

よろしくお願いいたします。

379 :
select
個人名,
max(case カラム番号 when 1 then エラー end) as エラー1回目,
max(case カラム番号 when 2 then エラー end) as エラー2回目,
max(case カラム番号 when 3 then エラー end) as エラー3回目,
max(case カラム番号 when 4 then エラー end) as エラー4回目,
max(case カラム番号 when 5 then エラー end) as エラー5回目
from (
select
個人名,
case
when not エラーA is null then 'エラーA'
when not エラーB is null then 'エラーB'
when not エラーC is null then 'エラーC'
end as エラー
row_number() over (
partition by 個人名
order by 日付 asc, オーダ番号 asc) as カラム番号
from エラー履歴
)
group by 個人名

380 :
よろしくお願いします。

381 :
こちらこそよろしくお願いします。

382 :
>>379
ありがとうございます!できました!!!
どうしてこんなクエリが思いつくんですか。すげぇですね!

383 :
質問です。
tableA
id

tableB
id, A.id

tableC
B.id, col1

のような、A-B-Cと、親-子-孫の関係で、子孫になるほど関連する行が1対多数になっていくテーブルで、

Bの1レコードにたいして、Aの情報と、Cのcol1がnullでない数の情報が欲しいのですが、
LEFT OUTER JOINでどう書けばいいでしょうか?

SELECT t1.x, t2.x, t3.nullでない数
FROM B t1
LEFT OUTER JOIN A t2
ON t1.A.id = t2.id
LEFT OUTER JOIN
(SELECT COUNT(col1) AS nullでない数 FROM C WHERE Bid = t1.id) t3
ON t3.B.id = t1.id

みたいな事がやりたいのですが、クエリはエラーになってしまいます。

384 :
FROM C WHERE Bid = t1.id) t3
の部分で、「t1はここから参照できない」みたいなエラーです。

385 :
自己解決しました
(SELECT B.id, COUNT(col1) AS nullでない数 FROM C GROUP BY B.id) t3
として、WHERE句を取ればいいだけでした

無駄な検索時間は増えてしまうと思いますが・・・

386 :
>>385
カラム名を変えさせてもらった
tableB id, A_id
tableC B_id, col

select tableA.id, tableB.id,
count(C.col) as count
from tableA,tableB,
(select
B_id,
(case
when col1 is NULL then NULL
else 1 end) as col
from tableC) as C
where
tableA.id=tableB.A_id and
tableB.id=C.B_id and
C.c is not NULL
group by A_id,C.col;

387 :
訂正 最後から2行目

× C.c is not NULL
○ C.col is not NULL

388 :
>>383
BCを先にjoinしてカウント。その結果とAをjoin

389 :
お願いします。
質問文を入力すると403 Forbiddenとなるのですが、なぜでしょう?
こういう文章は入力できるのに・・・

390 :
再度質問を投稿してみます。

CREATE TABLE TB(
MM VARCHAR(81) DEFAULT ’NOTHING’ NOT NULL)

なのですが、DEFAULTで'NOTHING'が設定されていてNULLにならないと思うのですが
文末にNOT NULL制御を掛けているのはなぜなのでしょうか?

391 :
>>390
> NULLにならないと思うのですが
NULLは後からでも設定できるだろ

392 :
>>390
insertでカラムにnull指定すれば出来るからでは

393 :
>>391
>>392
ありがとうございました!言われると恥ずかしいくらい簡単なことだったのですね。先生方、ありがとうございました。

394 :
1時間に1回だけ引けるガチャを実装したいんだけどどうすればいいですか?
一応、ユーザがいつガチャを引いたかを記録するテーブルを作って(不正が分かるように必須)
そこから検索かけて該当するのがあれば残り時間を返すみたいな実装を考えてます

・MariaDB 10
・user_id, time
・残り時間(引ける時はいらない)


395 :
>>394
DB設計を語るスレ 10 [無断転載禁止]&#169;2ch.sc
https://mevius.2ch.sc/test/read.cgi/db/1495438711/

396 :
条件1〜条件10のうち9個以上の条件を満たすものを抜き出したい。

select * from table1 where 条件;

の条件のところに
(条件1 AND 条件2 AND ...AND 条件10)
AND
(条件1 AND 条件2 AND ... AND 条件9 AND (NOT 条件10))
AND
(条件1 AND 条件2 AND ... AND 条件8 AND (NOT条件9) AND 条件10)
AND
...
AND
((NOT 条件1) AND 条件2 AND ... AND 条件10)

と愚直に11通り書く他に、スマートに書く方法無いの?

397 :
where case when 条件1 then 1 else 0 end
   + case when 条件2 then 1 else 0 end
   ...
   + case when 条件10 then 1 else 0 end
   >= 9

398 :
なるほど、CASE式を使うのか。 サンQ

ってか質問のころ、11通りを結ぶのはANDじゃなくてORの間違いだったな。

399 :
>>398
複数のselect文を書いてunion allの方が意図がわかりやすいうえに、条件を変えるときも変更時のリスクも低い。

400 :
>>399
ちょっと具体的に書いてみ

まともな頭持ってたら書いてる途中で顔真っ赤になると思うが…

401 :
>>399
条件ちゃんと読んでないのかもしれんが、複数条件つなぐのはorだぞ
ちょっとunionで書いてみてくれよ

402 :
単純に、orでつないでる式を一つにしたsql文をunionすれば良いと思うのだが

403 :
>>402
それのどこが「スマート」なんだ?

404 :
質問者自身にしろ、CASE使った回答にしろ、
SELECT条件で9個以上の判定をしていますが、
UNION使って列挙した場合、それぞれのSELECTが
独立してテーブルをスキャンする事になるので
仮に上手く書けたとしても効率が悪いって気がします

405 :
>>404
それは素人の考え方です。先の例ではSQLの見た目はシンプルそうに見えますが、実際の処理コストは高いと思われます。

406 :
それなりにデータベースに詳しくてもいまだにSQLはこう書くと内部でこう処理されると主張する方がいますが、それはリレーショナルデータベースの根本から否定する主張です。SQLは処理方法を指定しない非構造化言語です。

407 :
>>404
リレーショナルデータベースはそんなにお馬鹿ではありません。SQLの発行回数を問題視したり、SELECT句が難度も出てきたり、見た目だけでコストが高い、性能が悪いと言われて仕事でもかなりの支障をきたしますのでそういった発言は控えてください。

まずは実行計画と実際にどのように処理されたかSQLをトレースして己の知識を高めてから偉そうなことを言ってください。

408 :
後の例を提示してもらった上で性能なり効率なりを評価してみましょう

409 :
>>408
すぐに回答を欲しがるいつものあなたですが、ここは教育スレッドではありません。

ちなみにさきほどの非構造化とは非構造化データのことではなく、構造化定義のない言語という意味です。

410 :
教えてもらうスレではなく、質疑応答スレです。

>402 名前:NAME IS NULL[sage] 投稿日:2018/07/16(月) 20:50:23.35 ID:???
>単純に、orでつないでる式を一つにしたsql文をunionすれば良いと思うのだが

この人がSQL書いて提示するのを待っているところですが

411 :
>>397 の良くない点を挙げましょう。

SELECTが一度しか出てきませんが、WHERE句の条件を見れば、普通のプログラマはループのネストとわかるはずです。

一番の問題はそこではなく、仕様の変更に弱く保守性が低いところです。

複数のSELECT文のUNION ALLは結果セットを最後に単純に繋ぐだけで、それぞれのSELECT文が独立していますので仕様の変更が全体に影響しません。

ただし本当のところはオプティマイザの判断ですので、必ずこうなるわけではありません。

412 :
評価は後の例が出てきてからで良いでしょう?

413 :
>>410
条件が10個もあり、そのうちの9個の条件が真の場合のSELECT文のパターンは膨大だと思うでしょう。

SELCT * FROM Aテーブル WHERE 条件パターン1
UNION ALL
SELCT * FROM Aテーブル WHERE 条件パターン2
UNION ALL




とかなり並べないといけないと思うと思います。

ただ冷静に考えてください。10個条件があり、すべての条件を満たすSELECTはひとつです。10個の条件のうち9個を満たすSELECT文は10個、10種類です。

たった11パターンのSELECT文のUNION ALLです。簡単でしたね。

414 :
このスレでは集合演算子がないことにしている回答ばかりです。おそらく集合演算子が使いこなせないのでしょう。

もっとシンプルに考えてください。プログラマとは思えません。

SQLを組み立てるときに頭の中でWHERE句内でどうにかしなければいけないと思い込んでいませんか?

常にSELECT文がひとつでSELECT句内でSELECT文を使う回答やWHERE句の服問い合わせでどうにかしようとする回答も多いですね。

特定の人物が回答しているのがよくわかります。その場しのぎの小手先のSQLほど迷惑なものはありません。

415 :
条件パターンを例に従って具体的に書いてみてくれませんか?
そうすれば実際に性能評価ができそうですし

416 :
>>415
なぜ11種類の条件違いのWHERE句違いのSELECT文が理解できないのですか?

SELECTの結果を足し算、くっつければすればいい話ですので、あなたがUNION ALLを理解できないだけです。

SQLの入門書の絵でも見て勉強してください。

417 :
この人NGにした方が良さそうですね?

418 :
UNION ALLでなくてもSELECTがひとつでないといけないルールがあるなら、WHERE句に10個の条件がすべて真、9個の条件がすべて真の条件をOR条件でつないでもかまいません。

419 :
条件1〜条件10のうち9個以上の条件を満たすものを抜き出したい。

select * from table1 where 条件;

の条件のところに
(条件1 AND 条件2 AND ...AND 条件10)
AND
(条件1 AND 条件2 AND ... AND 条件9 AND (NOT 条件10))
AND
(条件1 AND 条件2 AND ... AND 条件8 AND (NOT条件9) AND 条件10)
AND
...
AND
((NOT 条件1) AND 条件2 AND ... AND 条件10)

と愚直に11通り書く他に、スマートに書く方法無いの?


↑は本人も訂正していますがORの間違いでANDと書いています。さらに本人は気づいていなかったようですが「 NOT 条件 」部分はいりません。

質問者はスマートではないと言っていますが、本人がスマートではないと見た目だけで思っているだけで、まったく悪くはありません。

420 :
>>413
おれなら11個も同一テーブルからのunion allとか書いてたらアホかと思うけどな
whereで11個or条件書く方がマシだわ
どっちにしても、9個以上が8個以上とか7個以上とかになったらどうするんだろうね

ああ、たんに最近union覚えて使いたいだけか

理解できてないのはお前のunionに対する実行効率だよ

まあ>>397がループのネストとか俺には意味不明だから、俺を遙かに超越した理解の持ち主なのかもしれんが

421 :
環境はそれぞれだったら、いろんな方法を試したらいいんじゃない?
で、目的に一番合うもの選べば。

422 :
効率云々の前にunion allとかにしたら重複行の扱いで結果異なるし
>>417が正解かと

423 :
まあちゃんとnot条件書けばいちおうunionでもunion allでも同じになるんじゃね
unknownになるような条件書かなきゃな

424 :
>403
どっちがスマートかと言えば、unionで繋げた方が"sql文"としてはスマートかな

425 :
現実社会じゃクイズ解いてるわけじゃないんだから、アプリ側でやっちゃうだけ

426 :
>>425
この例で
アプリ側でどんなクエリ発行してどんなロジックでチェックするのか教えてくれ

427 :
>>424
だからSQL書いてみろって
書いてる間に顔真っ赤になるだろ w

428 :
お前は読めるのか?

429 :
unionおじさんの次の一手は誰も言ってない要件を持ち出す、かな

430 :
UNIONとUNION ALLはまったく別物だ。

431 :
>>422
だから質問者のWHERE句での条件でいいのに。
なんでSQLを直すことになったらすぐにWHERE句全体が崩壊する方法を勧めるひとがいるの?

432 :
>>422
確かにUNION ALLでは同じレコードが返ってくることには気づかなかった。

433 :
質問者が静的SQLにこだわっている理由も気になる。10個の条件のうち9個が真という条件が激しく変化するのなら、動的SQLでSELECT文を組み立てた方が、てっとり早い。

こういう条件の場合は動的にSQLを組み立てるのが普通で、静的SQLにこだわる理由がみつからない。

こういう検索機能を動的SQLではなく、静的SQLにしようとすると、例の仕様変更に耐えられないSQLを使用しなくてはいけないなる。

434 :
>>433
静的/動的は関係ないでしょ?
まあ動的に生成するなら>>396でもそんなに面倒じゃないけど>>397でなんの問題もないしな
ちな>>399は論外

435 :
素朴な疑問だけど、なぜみんなUNIONを嫌うの?

436 :
適切な使い方なら良いんだが、これは違うだろう

437 :
この例で最悪でもテーブルスキャン1回で済ます実行計画吐くならまあunion allでもいいんじゃね
結果行数が多くなるならunionはダメだろうけど

438 :
誰か最初のUNION(ALL)の手前までででいいからSQL書いてくれ

439 :
言うに事欠いて1回のスキャンで済むunionとか…

440 :
【3.11津波は自民由来!? 安倍逮捕秒読みか!?】 ロシア国防省『日本は地震を偽装した核実験を止めよ』
http://rosie.2ch.sc/test/read.cgi/liveplus/1531966541/l50



2018年、テレビが隠している大ニュース!

441 :
ここのキチガイは実行計画もみたことがないからな。文字数が少ないSQLがスマートと言い張る。
なんでプログラマなのに

442 :
a

443 :
実行計画という用語を最近覚えたノロマ w

444 :
おまえの事やんけ

445 :
なにか気に触ったのか? w

446 :
おまえ何時も他人の顔色うかがってばかりやな

447 :
ノロマは何をやっても駄目だな w

448 :
おまえの事やんけ

449 :
実行計画とか考慮したら、unionはないわw

450 :
>>448
>>444
いつものバカループ w

451 :
>>449
実行計画がなんなのか分かってますか?

多少の知ったかぶりはかまいませんが、少しは謙虚にわからないことはわからないと言うようにしましょう。

452 :
その実行計画をやってみたいから、早くUnion使ったSQLをここに晒してくれ

453 :
unionの1回目のselectで、キャッシュに乗る

454 :
それぞれのselectが異なるのに?

455 :
バッファキャッシュ

456 :
キャッシュに乗るかどうかは実行計画とは直接は無関係だがな
キャッシュにのったからって不要なテーブルスキャンが許容できるわけではない

457 :
でっかいテーブルだとキャッシュに収まるのは無理

458 :
条件によってはインデックスしかアクセスしない可能性もあるしな

459 :
不要なテーブルスキャン

460 :
>>451はアホやけどおまえらはその足下にも及ばんアホなんやで?
知らんかったやろ?

461 :
>>460
実行計画ではなくコストだったと間違いを認めなさい。

462 :
>>461
おまえが一番アホやなw

463 :
条件1〜条件10のうち9個以上の条件を満たすものを抜き出したい。

テーブルは以下の内容とし、レコード件数は1万件、
cond*にはランダムに1〜100までの数値を設定し、
抽出条件は各カラム値が50を超えるものとする

create table vote (
id int primary key auto_increment,
cond01 int,
cond02 int,
cond03 int,
cond04 int,
cond05 int,
cond06 int,
cond07 int,
cond08 int,
cond09 int,
cond10 int);

464 :
case when
https://ideone.com/ceErb8

union
https://ideone.com/9388vP

465 :
unionにだけorder byあるとか
やるならちゃんとやって

まあunionはたいがいの場合でソートするんだが
unionの押しの人はunion allって言ってなかったっけ?

どうせならインデックスの有無も

466 :
case whenはそのままid順になるけど、unionはならなかった
union all使えば重複の除外が発生するし、変わらないんじゃない?
index付けてもunion内のsql実行に影響するだけで、
マージする性能には多分影響しない

続きは各自で

467 :
>>466
ただのunion はdistinctで重複除去、除去しないのがall指定
この例でunion allだと重複行がでるはずだぞ

caseはID順(おそらく主キーか物理格納順)でテーブル舐めてるからそのままID順だな
unionで順番変わるってことは、重複除去の方法がソート系じゃない可能性が高い
まあなんにしても、order by書かないと順番は不定ってのが原則なので
両方に書くか両方に書かないか合わせないと

indexは、unionの各whereには効くだろうけど、caseにはうまく効かないんじゃないかと
まあそれで実行性能がひっくり返るとしても、unionで書こうとは思わんが

468 :
>>464
ごめん9は間違いで8以上だったSQL直してくれる?

469 :
sql自体でなくて申し訳ないが,前の例で、10億レコードで,テーブルが列ストアで保持されているとした場合、whereでー発フィルタリングするのと、unionするのとどっちが効率的なのだろう?
条件が適用されるカラムのメンバー数にもよりそうな気もするが、どんなもんなんでしょうか

470 :
やってみればいいのに。見た目がシンプルなのと処理の重さは反比例する。

471 :
見た目で決まるほど今のオプティマイザはアホじゃないし

472 :
質問です。

select a + b +c -d as 計算結果
where 計算結果 > 0

とすると行が表示されません。where句を外すと、
計算結果は0より大きい値でちゃんと出てきます。

where a + b +c -d > 0 

と書き換えると表示されたのですが、
where句でselectの as 別名 は使えないのでしょうか?

473 :
一部つかえるDBMSもあるようだが原則使えない

474 :
普通はselect句でつけた別名を使えるのはorder by句だけだな

475 :
そうだったんですね
できそうなイメージだったんですが
ありがとうございます

476 :
いい加減使えるようにしろよとは思う

477 :
select a + b +c -d as 計算結果
having 計算結果 > 0

478 :
>>475
よく考えてくれ。WHERE句が先に評価され、そのあとにSELECT句の選択リクトが評価される。

いったんSELECTした結果に対して、絞り込みのWHERE句つきSELECTを再度するのを基本としてしまうと、SELECT文は常にフルテーブルスキャンをして、その結果を一時的に保管して、保管した結果に対してさらに検索することになる。

479 :
>>471
だから見た目をシンプルにするのは意味がないと言っているのだが?

480 :
>>478
なんでそんな難しいことを考えるんだよ…
> select a + b +c -d as 計算結果
> where 計算結果 > 0
ってあったら
select a + b +c - d as 計算結果
where a + b +c - d > 0
って展開すれば良いだけだろ

481 :
>>479
>見た目がシンプルなのと処理の重さは反比例する
反比例ってどういうことだ?
基本的にはシンプルなSQLほどオプティマイザの裁量が広がって有利なんだが

482 :
>>478
この場合はどっちにしても全行計算してから絞り込むから大差ないような・・・

483 :
>>478
ああ一時テーブルのメモリと、捜査が2度手間になるのか
whereが先だったのか
どっかのサイトにselect結果をwhereで絞り込むって書いてたけど

484 :
ちょっと前のunionの話だけど
処理効率や保守性はおいといて、10個の条件のうち9個を満たすものをとるのにunion使ってどうやるの?

485 :
それを書いた本人の真意はわからんけど、

(1番目以外の9個を満たすクエリ)
union
(2番目以外の9個を満たすクエリ)
union
:
でできるはず。

486 :
>>485
それselectごとに条件9個ずつ書くの?

487 :
ごめん、保守性はおいといてって言ったの自分だね
たしかにそのやり方ならできるか

488 :
自分なら union 化して
where x.cond > 条件 group by id having count(*) > 件数
を副問合せにする

489 :
>>485
unionだけだと元は異なるレコードでも結果が同じだったら1レコードにされちゃう
かと言ってunion allだと複数の条件にヒットするレコードが複数出ちゃうよ

490 :
>unionだけだと元は異なるレコードでも結果が同じだったら1レコードにされちゃう

主キーが存在しないテーブルならともかく、適切なselectリストにすりゃいいだけ。

>かと言ってunion allだと複数の条件にヒットするレコードが複数出ちゃうよ

(1番目を満たさずそれ以外の9個を満たすクエリ)でおk。

491 :
なんでいまさら話をループさせてるんだ

492 :
>>491
ここに常にいるキチガイ

493 :
(プライマリではない) authorがaaaとbbbの最新のレコードをそれぞれ1件ずつ取得したいのですが
どのようにしたらいいでしょうか? 最新かどうかは updated_at で判定できます

SELECT * FROM news WHERE author IN ('aaa', 'bbb')

494 :
>>493
もう少し詳しく書いて欲しい
テーブル定義と、updated_atでどうやって判定するのかなど

495 :
>>3じゃないのか?

496 :
MySQLでREPLACE関数を使って複数行を置換するにはどうすればいいのでしょうか?

例えば「body」というカラムがあるとして以下の値が登録されているとします。
あいうえお
かきくけこ
さしすせそ

これをREPLACEして「さしすせそ」のみ残したい時、

UPDATE news SET body=REPLACE(body,"あいうえお\r\nかきくけこ\r\n","")

としたのですが、置換できません。

497 :
>>496
出来ると思うんだが、出来ないとしたら
bodyの文字列中改行コードが、
replace関数で指定したものと違っているのかも知れない。

498 :
>>497
\nにしても駄目でした。一行だけだと置換できるんですけどね・・・

499 :
>>498
select hex(body) from table名
とやって、
改行部分を16進数で見てみるとか

500 :
>>494-495
遅くなりました
>>3 のをいろいろ弄ってみて実現できました
よく見ず質問してしまいすいません。
ありがとうございましたm(_ _)m

501 :

板復帰(OK!:Gather .dat file OK:moving DAT 215 -> 193:Get subject.txt OK:Check subject.txt 215 -> 215:Overwrite OK)0.86, 0.75, 0.74
age subject:215 dat:193 rebuild OK!

502 :
すいません。DB2でフラッシュバッククエリのコマンドを実行したいのですが、
ググってもOracleのコマンドしか出てきません。
どなたかご教授お願いします。

503 :
>>502
IBM DB2 総合スレ2
https://mevius.2ch.sc/test/read.cgi/db/1166153254/

504 :
そっちのスレは過疎ってますし、そもそも回答になってませんが・・・

505 :
ここは特定のDBMLの操作方法を質疑するスレじゃないので

506 :
DB2にフラッシュバッククエリなんかないでしょ
ぐぐるとOracleのLogMinerみたいな機能ですら
db2ReadLog APIを使って自分で実装しろと出てくる

507 :
アクセスでの開発なのですが
氏名,エラー内容.エラー回数
A,ダメポ,1
A,無理ぽ,2
B,もうだめ,1
C,むり,1

みたいなものをクエリで出して、行列を入れ替えて
  1回目 2回目
A ダメポ 無理ぽ
B もうだめ
C むり
みたいに出力をしようとしています。

これが2万レコードほどあり、処理が重たくて困っています。

select 氏名
MAX(エラー内容)
from (抽出クエリ)
group by 氏名

等で出力すると、処理が非常に重たく

select 氏名,
[1回目].エラー内容
[2回目.エラー内容
from (抽出クエリ where エラー回数=1) as 1回目
left join on (抽出クエリ where エラー回数=2) as 2回目

みたいにしても重たいのです
どなたか助けてください

508 :
>>507
エラー回数は最大2ではなくNなわけ?
かりにNだった場合SELECT句はどうするつもり?

509 :
エラー回数は有限で3回までです。
accessがtempテーブルも使えず、実体テーブルにselect into しても
それだけなのに、2万件で1時間近くかかってしまっています。
助けてください。。。今日そのことばかり考えながら家事をしていました。つらい

510 :
抽出クエリ自体を実テーブルにして氏名にインデック貼って

SELECT
氏名,
Max(IIf(エラー回数 = 1,エラー内容,Null)) as 1回目,
Max(IIf(エラー回数 = 2,エラー内容,Null)) as 2回目,
Max(IIf(エラー回数 = 3,エラー内容,Null)) as 3回目
from 抽出クエリ結果
group by 氏名
order by 氏名

とかかな

511 :
抽出クエリってやつは実テーブルじゃなくて何かの条件で抽出した状態のビューを言ってるわけ?
それとDBがアクセスってだけでSQL自体は外部ツール(C#とか)から実行するの?

512 :
適切なスレが見当たらないんで、ここで聞くんだけど
sqlから、ER図を生成する方法ってある?
できればoracleで。
イメージ的には、プログラミングで言うと
ソースコードからクラス図を生成するイメージ

513 :
>>510
ありがとうございます。
実テーブルに入れるというところで30分以上かかってしまい。
select だけだと1分程度で抜けるのが、insert selectでも select insertでも
30分かかってしまって、その後にクエリ流すのに時間が掛かってしまっています。

>>511
from 句の中に書いたサブクエリになります。
アクセスに対して、エクセルのVBA側から呼び出しをかけています。

514 :
>>512
SQLってDDL分ってこと?
実態テーブルからER作成するのは
有償ツールはいくつかあるけど
とりあえずA5とかで試して見たら?
https://a5m2.mmatsubara.com/help/ER/
FKとか指定してないとさすが無理だけど

515 :
>>514
DDLではなく、普通のselect分です。
DBにつながる環境で、FKとかはDBから拾ってきてほしい想定です。
実テーブルから、ER図ではなく、
実テーブルと、select分から、ER図を作ってほしい

516 :
select
抽出テーブル1.氏名,
抽出テーブル1.エラー内容 as エラー内容1,
(select エラー内容 from 抽出テーブル as 抽出テーブル2 where 抽出テーブル2.氏名=抽出テーブル1.氏名 and 抽出テーブル2.エラー回数=2) as エラー内容2,
(select エラー内容 from 抽出テーブル as 抽出テーブル3 where 抽出テーブル3.氏名=抽出テーブル1.氏名 and 抽出テーブル3.エラー回数=3) as エラー内容3
from 抽出テーブル as 抽出テーブル1
where 抽出テーブル1.エラー回数=1
order by 抽出テーブル1.氏名;

access2016のSQLビューで動いた奴

517 :
エラー内容ってカラムが実は1つのテーブルから複数もってくるけどはしょられたら破綻するけどね

518 :
>>516
これはデータ件数が多いと時間かかりそう
レコード1件ごとカラムのサブクエリが実行されるだろう

519 :
>>518
おれもそうおもったんだよね
抽出テーブルがサブクエリだとなおさらだな

2万件っていってるのは元データが2万なのか、
氏名で出力する行が2万件なのか(2万×最大3列=6万)なのかで結果がかわるけど、
どっちなんだろな

520 :
>>516
ありがとうございます。今一番早く出来たのがその形で、それで1時間掛かっています。

抽出対象が2万件。
そのそれぞれに最大3列、エラーが発生し得る状態です。

サブクエリで抽出している下記のデータは、30万件ほどから抽出していて
氏名,エラー内容.エラー回数
A,ダメポ,1
A,無理ぽ,2
B,もうだめ,1
C,むり,1
抽出もとは最終的に100万件ほどまで増えます。

30万件から抜くクエリは1分程度なので、×3でいけると思っていたら1時間掛かるようになってしまい。

521 :
>>520
問題を切り分けたほうがいい気がしてきたけど、
@単純にデータを取得する場合の実行速度
select 氏名,エラー回数,エラー内容
from 抽出テーブル
order by 氏名,エラー回数
Aエラー回数を列別に変換する場合の実行速度(>>510)を参考
select
氏名,
Max(IIf(エラー回数=1,エラー内容,Null)) as エラー内容1,
Max(IIf(エラー回数=2,エラー内容,Null)) as エラー内容2,
Max(IIf(エラー回数=3,エラー内容,Null)) as エラー内容3
from 抽出テーブル
group by 氏名
order by 氏名
これはどのくらいの実行時間なわけ?※Openして何もせずにループだけする

522 :
いまなんの話題?3行で

523 :
s
q
l

524 :
>>521
状況をきちんと伝えられていなくて申し訳ないです。

30万行の元データ→エラー回数抽出サブクエリ(@ 件数は2万件程度抽出)→エラー回数を列別変換(A)
という流れです。

@は1分程度で1クエリは抽出完了、Aは1時間掛かってしまっています
当初>>510のように作っていましたが、処理を見直し>>516のようなクエリに書き換えています。
@は分析クエリのように演算で回数を出しています。

525 :
>>524

>>510が正解じゃない?
インデックス効かせるには。
書き込み時間がかかるかもしれないけど。

最終結果の使い方わかんないけど
VBAとかで2万件結果セットループで変数持ちとかじゃだめか。

526 :
>>524
> @は1分程度で1クエリは抽出完了
@の結果をアプリ側で整形するってのはできないの?
SQLは行列変換得意じゃないし

527 :
>>525-526
他のDB情報と最終的に結合して出力するためできればクエリでやりたいと思っていました。
ただ、どうしても時間が掛かるならVBA側で実装するのもありですね。

もう少し性能測定して、改善の見込みが無かったらVBAに乗り換えてみます。
諸々失礼しました。

528 :
>>515 って、無理ですかね。

529 :
実テーブルから定義を引ければ十分だと思うけど、なぜselect文が必要で
>>514じゃ何が足りないのか、質問の意図が誰も理解できないんだと思う。

530 :
>>514 に書かれてるようにFKないんじゃね?
join の結合条件見ろと

531 :
>>496
なんでreplace関数を使わなきゃいけないのか?

where句の条件が あいうえお、かきくけこ で SET句の値が さしすせそ でいいだろ。

532 :
>>531
さしすせそは不定で指定できないとか。
最初の2行はヘッダーとか特定できるなにかなんじゃないかな。

>>496
ちなみにxampp5.6.12でテストしたら>>496のクエリでできたよ。

命令送ってる側とかで勝手に改行コード省かれちゃってるとか?

サーバーでログとってみたら?

533 :
>>532
MySQLと質問者は書いているのに、なんでXAMPPという何をどう使っているのかわからないくくりで答えているのか?

534 :
改行コードを含む文字列の置換を言っているのか。単に改行コードがSQLの改行コードとみなされるような環境で発行してねえだろうなw

535 :
質問者もMySQLとしか書いてないので環境がよくわかんないから
とりあえずMySQL使ってればなんでもいいかとおもって。

536 :
個人からの申請で、登録、変更、削除を受け付けます。
その時、変更だけしか申請していない人を抽出するSQLはどう書いたらいいですか。

変更と登録、変更と削除など、他の申請を出した人は除いて変更だけの人を抽出したいです。

537 :
>>536
そのDBシステムで、
受け付けた登録、変更、削除をどう扱っているか次第

538 :
>>536
そのテーブルのカラム名すらも書けないんならSQLいじるの止めたほうが良い

539 :
>>536
個人Id | 申請
------+-----
001 | '登録'
002 | '登録'
001 | '変更'
002 | '削除'
003 | '変更'
で003だけ欲しくてSQL-Server使ってるとエスパー
select 個人Id from テーブル where 申請 = N'変更'
except
select 個人Id from テーブル where 申請 <> N'変更'

540 :
監査の話かと思った

541 :
>>539
「SQL Server」を「SQL-Server」と書きたい理由を教えてくれ。

542 :
【ちびまる子、乳ガン】 モー娘がヒキ逃げなら  <急に基準変更して逃走>  トー電はベク逃げかな
http://rosie.2ch.sc/test/read.cgi/liveplus/1536979182/l50


関東の子供が、東電にベク逃げされて、棺桶が売れてる!

543 :
>>541
単なる好みだけどそれが何か?

544 :
製品名は変換する目的は何か?

545 :
お前みたいな日本語怪しいやつをあぶり出すため

546 :
固有名詞を改変したら駄目だろう

547 :
ええやろw

548 :
商標権を侵害してるな

549 :
半角スペース恐怖症なんだろうな。

550 :
誰でも間違いはある
気にするな

551 :
製品名を正しく書けないやつはたいてい危険人物。だいたいよくわかっていない。

552 :
なんやこの病的すぎるバカw

553 :
内容に突っ込めないから製品名に突っ込むしかないんだろ
どうでもええわ

554 :
お客相手に間違えなくて良かったじゃないか

555 :
ところで、IDが出てたり出てなかったりするのは何故?

556 :
>>554
そんなもんを気にしてるお客なんてお前の脳内にしかいないけどなww

557 :
>>555
sageかどうかでしょ
そもそもsageてない奴のレスは見る価値ないし

558 :
責任をとりたくない奴は、IDを隠すってこと

559 :
責任? w

560 :
図星に脊髄反射しとる奴、おる?

561 :
図星に脊髄反射しとる奴 ⇒ >>558

562 :
>>557
いまどき上げ下げかw

563 :
sageるのって荒らしに見つからんようにとかそんな理由だったっけ?
今だと勢い順か新しい順、あるいはスレ検索して見るからもう完全に意味ないよな、わざわざ荒らすやつも激減してるし
ましてこんな過疎版じゃ気にするだけ無駄

564 :
質問スレだと、質問者は必ずageてって板もある
ID出た方が成りすましを防げるからやり取りで
混乱しなくて良いと言う側面もある

565 :
質問スレはそんなルールあったね
sageるとID出ないのはDB板の仕様か
技術的な話をするんだから一律IDつけたほうが勝手がいいと思うけどなあ
専ブラがデフォルトsageになってていちいち削除すんのもめんどいし

566 :
質問するのでIDありで・・・
リレーショナルデータベース=JOINで複数のテーブルをまたいでクエリを投げられる

という意味?

567 :
リレーションってのは要はテーブルだ。
リレーションでできているデータベースだからリレーショナルデータベース。

568 :
レスありがとう。
リレーショナルではないデータベースというのは、テーブルでは無いデータベースが想像つかないな・・・。
二次元的なものではなく、テキストに羅列されているだけという感じだろうか。
昔pc-98で桐ver2とか名前だけは知っていたけど、あの頃はすでにテーブルという概念があったのかしら?

569 :
すごい会話だなw

570 :
>>568
自作自演?

571 :
>>568
桐もDBASEもリレーショナルデータベースだな
テーブルであるならそうかといえば、ちょっと違う

複数のテーブルを関係性で紐付けが出来るなら
リレーショナルデータベースと呼んで良いと思う

Excelの表はテーブルだけど誰もそうは呼ばないしな

572 :
情報処理試験とかデータベースの勉強をすれば初めの方で説明されているはずだけど、
リレーショナルの前には階層型やネットワーク型といったデータベースの形式があった。

ついでに言えば、リレーショナルデータベースには「複数のテーブル」などという要件はない。
複数のテーブルはその直積である1テーブルと等価なんで。

573 :
なんか変な素人が出てきたなw

574 :
普通はRDBMSと言えばリレーショナルデータモデルを表現できるだけでなく
ACID特性を備えるのが必要条件とされる
最近流行りのNoSQLなんかはリレーショナルデータモデルを表現するものではない上に
ACID特性のいずれかを満たさないのが普通だったりする

575 :
NoSQLが最近ものだと?

タイムマシンで過去から来た人間の書き込み?

576 :
しまった
自ら正解を出すことはできず文句しか言わない人に絡まれてしまった

577 :
NGにすると吉

578 :
おまえらが知る前から俺は使ってるんだ( ・`ー・´) +

579 :
>>574
RDBとDBMSの区別がつかないなら、ややこしくなるだけだから黙っとけな

580 :
プライマリキーをフォーリンキーにすることはできますか?

581 :
できるが変な設計だなとは思う

582 :
>>581
時系列データのテーブルが2つあって
時間をフォーリンキーにしたいんですけどおかしいですか?

583 :
>>580
単に1対1のテーブルだからおかしくはない。

584 :
インデックスが使われるSQL文の書き方というのは、例えば出庫データに
商品コード順+出荷日順+伝票番号順というインデックスを作っておいて
SELECT * FROM 出庫データ WHERE 商品コード='A01' ORDER BY 商品コード, 出荷日, 伝票番号
みたいにするとレスポンスが速くなるということでしょうか?

585 :
>>584
プラス記号の意味がよくわからんが
CREATE INDEX(商品コード,出荷日,伝票番号)
という複合主キーを作成すると
例示のSQLは速くなるだろうが
ただしインデックスの順序と異なる
ORDER BY 出荷日,商品コード
などと場合は効かない

586 :
>>585
ありがとうございます

587 :
>>584
忠告しておくが、インデックスが使われるSQLを書くのではなくて、問い合わせの内容とインデックスが必要かどうかを考えてSQLを書く。

SQLがこうだから、このSQLはこのインデックスが使われるとSQLだけでは言いきれない。

588 :
>>586
複合主キーじゃないわ複合インデックスね

>>587の言うように
実際に効くかどうかは実行計画で決まるので
インデックスを使ったかどうかは
実際の実行計画を取得しないとわからない
オプティマイザが意図したインデックスを使ってくれない場合
ヒントで特定インデックス使用を強制することもDBMSによっては可能

589 :
https://imgur.com/FAF05na.jpg

590 :
常にサクラのサイトが応援している ノーザンコペルニクス
https://mevius.2ch.sc/test/read.cgi/blog/1538500447/

591 :
 私たち日本人の、日本国憲法を改正しましょう。
『憲法改正國民投票法』、でググってみてください。
(へいわ)は、勝ち取るものです。拡散も含め、お願い致します。

592 :
質問です。
以下のようなテーブルがあったとします。
id|name
------
0|aaa
1|bbb
2|ccc

aaa,bbb,ddd,eeeを呼び出し側から与えて、nameにない項目(dddとeee)を取得したいです。
こういう場合どのように書けばよいでしょうか。
擬似的にaaa,bbb,ddd,eeeの項目をテーブルのように扱えればできそうですが、やり方がわかりません。
SQLiteを使っていますが、汎用的な書き方でできればしたいです。
よろしくおねがいします。

593 :
>>592
case when thenとかは?

594 :
汎用的には、テーブルを作ってしまうのが良いと思う

595 :
SELECT
a.empno<br />
,a.ename
,a.job
,b.ename AS 'mname'
FROM
emp a
,emp b
WHERE
a.mgr = b.empno;
このようなSQLを書いたのですが、SELECTのAS句が機能しません。どうすれば機能しますか?

596 :
'mname' の囲みいらない

597 :
意見ありがとうございました。
汎用的なのは諦めて、SQLiteでは以下で疑似的なテーブルができるようなので、これをもとにSQLを考えていこうと思います。
WITH t(name) AS (SELECT * FROM (VALUES ("aaa"), ("bbb"), ("ddd"))) SELECT * FROM "t";

598 :
>>595
行頭に,を書く悪習はいいかげんヤメロ

599 :
行頭に,を書くとどういう問題があるんだ?

600 :
>>599
ヴィジュアル的に認識しにくい

601 :
まさかそれだけ?

602 :
>>599
見た目にブサイク
(個人の感想です)

603 :
膨大なカラム数があって、スクリプトで処理しているときには都合が良いかもしれないが、
手作業で編集する分にはどっちでもいい気がする

604 :
コードは読むもんだと教わらんかったんかおまえら?
ヴィジュアル問題の大切さがいまいちわかっとらんな

605 :
前カンマの方が打ち忘れが減るので
自分はこちらのヴィジュアルが合っているらしい

606 :
それヴィジュアルちゃうやんw

607 :
前にカンマの方がコメントアウトする時に楽

608 :
だからヴィジュアルちゃうやんそれ
しかもどっちゃでも変わらんしw

609 :
カンマの忘れとか、余分なカンマとか、割とよくやるw

610 :
最近JSONとか末尾カンマ無視するのあるよね
あれ導入されれば後ろでもいいんだけどな
前の方が行カット&ペーストで入れ替えやすい

611 :
前カンマの方が綺麗だと思うけどなあ
カンマと列名の間にタブなりスペースなり入れてカンマの位置を揃えるの
テキストエディタで矩形選択を使ってごりごり編集するのに便利なのだ

612 :
人の好きずきの問題をここで語られても

613 :
caseの件

614 :
書式整形ソフト使って好きな形で読め。
--のコメントさえなければSQLは改行なし
で書けるんだから読むやつが好きに整形しろ。
ここで個人の好みの書式の話しされると
うざい!!

615 :
ちょっと難しい問題を出してみて
そうしたら、多分静かになるから

616 :
そもそもカンマがいらなかったんだよな。

英文っぽくしたためにカンマ区切りにしてしまった。

列名の区切りは半角スペースか改行でよかった。

617 :
質問させてください。
使っているのはSQLite(Python)です。

あるテーブルに、たとえば性別、血液型、職業というカラムがあって、
それぞれ、男、A、会社員、などと、データが入っているとします。
これら3つのカラムの中身について、テーブル内にある組み合わせの
パターンをすべて抽出したいのですが、sqlでどのように書けば効率がよいでしょうか?

抽出後、(男、A、会社員)は何名、(女、A、会社員)は何名、、、と
集計することが目的です。テーブルにより起こる組み合わせが様々なので、
都度調べる必要があります。

単純にFor文で1行ずつ調べて、過去にない組み合わせであれば外部のリストに
追加する形だと、非効率な気がしています。
良い方法があればお教えください。

618 :
ぐぐっていたら、下記を見つけました。

https://www.dbonline.jp/sqlite/select/index9.html

DISTINCT を使えばできそうです。
ありがとうございました。

619 :
>>617
こうじゃないか

select `性別`,`血液型`,`職業`, count(*) as `人数`
from `テーブル`
group by`性別`,`血液型`,`職業`;

620 :
効率悪いし、何名か?が取れないと思う

621 :
distinctについてね

622 :
>>619

ありがとうございます。
助かりました。

623 :
再び質問です。
教えてもらった

select `性別`,`血液型`,`職業`, count(*) as `人数`
from `テーブル`
group by`性別`,`血液型`,`職業`;

で得られる'人数’を同じテーブル内の別カラムに保存したいと思い、
カラムは事前に作成しておいて、

update 'テーブル' set '人数のカラム' =
(select `性別`,`血液型`,`職業`, count(*) as `人数`
from `テーブル`
group by`性別`,`血液型`,`職業`)

としてみたのですが、group byの最後のグループのcountの結果が
全部の行に上書きされてしまいます。

各行毎に所属するグループの人数を記録するにはどう書けばよいでしょうか。

(目的は、その人(各行)の所属するグループの人数を個別に保存することです。)

よろしくお願いします

624 :
>>623
> 各行毎に所属するグループの人数を記録するにはどう書けばよいでしょうか。
> (目的は、その人(各行)の所属するグループの人数を個別に保存することです。)
そんな設計やめなよ…
レコードに追加/削除/更新する度にその人数も更新しないとだめだし
毎回求めてもよほどでかい表でない限りは問題にならないだろ

625 :
>>623
使用意図はわからんが、どうしても一時的にテーブルに保存したきゃUPDATEじゃなくて、DELETE→INSERTでよくね?
オイラならテーブル変数使うけど

626 :
>>624

コメントありがとうございます。
実はモデルをすり替えて質問していまして、
データを書き換えての繰り返し計算に使いたいのです。

その後、order by でなく、select以下のテーブルをtable as Tなどとしてwhere句で’テーブル’とTの要素が等しい時に限定したら一応できました

何故かブロックされたのでスマホから

627 :
>>625
使用意図は、エクセルの表計算のように、
左のカラムにデータがあって、それを元に
右の方のカラムに途中計算を書いていって、
最後に得られた結果の誤差が減るように
また最初の方から計算を繰り返すような感じです。

1巡の計算が大きすぎて記録を残したいのですが、ご指摘の通り、記録が不要なところはテーブル変数がよさそうです
勉強してみます

628 :
オレ多分頭悪いんだろう
>>626 で何を言っているのかよく分からない

愚直に>>623の要求通りのものを書くとすれば
`テーブル`に`人数`カラムを追加したとして
update `テーブル` t1 set
`人数` = (
select `人数` from (
select `性別`,`血液型`,`職業`, count(*) as `人数` from `テーブル`
group by`性別`,`血液型`,`職業`
) t2
where
t1.`性別` = t2.`性別` and
t1.`血液型`= t2.`血液型` and
t1.`職業` = t2.`職業`
);

でも、こんなこと実際にはしないし、
もっと良い方法が必ずあるはずだし
見直した方がいい

629 :
>>628

626が意味不明で申し訳ないです。
書かれておられるように自分もwhereで
比較しました。

計算は各行に対してするのですが、
それが所属するグループの平均等の計算値も
途中計算で何度もつかうのです
それで、各行にそれを入れておきたいのです

なんだか変な事をやってるみたいで恐れ入ります

630 :
結局何をしたいのかさっぱり理解できないけどわざわざ違うモデルで答えさせるとか失礼な事するやつだからスルーしとくわ

631 :
質問をシンプルにしたくてモデルを
変えましたが、失礼と思われたようで
済みません

632 :
わざわざスルーするって宣言してる奴なんだからスルーでいいよ

633 :
合計値も平均値も割と簡単に計算出来ますし
それをテーブルに入れた方が良いのか
それともDBを見ているミドルの方で計算させた方が良いのか
全体の仕組みと性能で総合的に考えた方が良いかもしれません

634 :
http://altohumano.com/gt-r%e3%80%80%E8%B2%B7%E5%8F%96/

635 :
mysql,mariadbでmyisamが非推奨になったのはなぜですか?
innodbではbeginやcommitが使えるそうですが、メモ的なデータをinsertするぐらいなのですが、
それでもinnodbを使った方がいいのでしょうか?

636 :
そういうのは各RDBのスレがあるんだから、そこで聞けよ

637 :
>>635
こちらで聞いてみたら

MySQL SQL質問応答スレ
https://mevius.2ch.sc/test/read.cgi/db/1478776715/

638 :
専用スレがあったのですね、誘導ありがとうございます。

639 :
【勝谷誠彦(57)死去】 人口が毎年20万人も減るほど被曝して応援させ、さらに70歳まで働いて応援
http://rosie.2ch.sc/test/read.cgi/liveplus/1543371270/l50

640 :
以下のようなデータがあった場合、
name date rate
AAA 11/1 2000
BBB 11/1 900
CCC 11/1 500
DDD 11/1 700
AAA 11/2 2000
BBB 11/2 1200
CCC 11/2 500
DDD 11/2 700
AAA 11/3 2000
BBB 11/3 500
CCC 11/3 1500
DDD 11/3 700

最新のrateが1000未満だけを抽出するにはどうすればよいでしょうか?
DDD 11/3 700
BBB 11/3 500

641 :
>>640 こうかな?
select name, MIN(date), rate
from hoge
where rate < 1000
group by name, date, rate

642 :
違った、こうか?
select a.name, a.date, a.rate
from hoge as a,
(select name, MAX(date) from hoge where rate < 1000 group by name, date) as b
where a.name = b.name and a.date=b.date;

643 :
SELECT * FROM a WHERE (name,date) IN (SELECT name,MAX(date) FROM a GROUP BY name) AND rate<1000

644 :
>>642
レスありがとうございます。
試したのですが、fromのselectでMAX(date)以外のも全て列挙されてしまいます。
DDD 2018/11/01 00:00:00
BBB 2018/11/01 00:00:00
CCC 2018/11/01 00:00:00
DDD 2018/11/02 00:00:00
CCC 2018/11/02 00:00:00
DDD 2018/11/03 00:00:00
BBB 2018/11/03 00:00:00
ちなみに使用DBはpostgresqlです。

645 :
>>643
おお!できました!!
ありがとうございます!
整理して理解します。

646 :
こういうときに色々意地悪な条件をついつい考えてしまう
最新日って言う場合、1件だけになるのか、
それとも同一日は全部該当にするのか
結果表示に時刻まで出てきていると悩んでしまう
その後の処理で何を使いたいかにもよるんだろうけど

647 :
>>646
ここで質問してくるやつはいつも仕様などあまり考えていない。

648 :
2つの文字列カラムがあり、一方がもう片方の文字列から始まるものだけを抽出したい場合どうすればいいですか?
str1 str2
ABC ABCDEF
DEF aiu
GHI GHIxxx
JKL akasa
の場合、
ABC ABCDEF
GHI GHIxxx

649 :
>>648
str1の長さがstr2より短いことがわかってるなら
where left(str2, len(str1)) = str1
でいいかと

650 :
ためしてないけど、
where (str1 like str2+'%') or (str2 like str1 + '%')とかでどうだろう

651 :
>>648
んじゃ他ので
WHERE PATINDEX(str1 + '%', str2) = 1

652 :
>>649>>650>>651
お三方、ありがとうございました。
ばたばたしてて遅くなりましたが、確認できました。

653 :
>>650-651
str1とかstr2に'%'含んでても大丈夫だっけ?

654 :
大丈夫。ただ+が使えるのはMS系だな。
後は使えるやり方に読み換えて

655 :
SQL SERVERのSQL文について質問です

【条件】
1.全てのテーブル内容を取得
2.@ABのM_CODEとS_CODE、CのM_CODEとS_CODEが一致したNAMEを取得

一つのSQL文で完結できると助かります
以上の内容でご教示お願いします


@Table1
ID | M_CODE | S_CODE | 内容
--+----------+-----
01 | 1 | 1 | a
02 | 1 | 2 | aa
03 | 1 | 3 | aaa
04 | 1 | 2 | aaaa

ATable2
ID | M_CODE | S_CODE | 内容
--+----------+-----
01 | 2 | 1 | ab
02 | 2 | 2 | abb
03 | 2 | 3 | abbb
04 | 2 | 2 | abbbb

BTable1
ID | M_CODE | S_CODE | 内容
--+----------+-----
01 | 3 | 1 | ac
02 | 3 | 2 | acc
03 | 3 | 3 | accc
04 | 3 | 2 | acccc

CCode
M_CODE | S_CODE | NAME
--+----------+-----
1 | 1 | サッカー
1 | 2 | 野球
1 | 3 | バスケット
2 | 1 | バナナ
2 | 2 | リンゴ
2 | 3 | オレンジ
3 | 1 | サバ
3 | 2 | カツオ
3 | 3 | マグロ

656 :
1,2,3をuionして4とjoinすればいいんだろうけど,何んでこんな設計?

657 :
欲しい結果がよくわからん

4に1〜3をJOINするだけじゃダメなのか?

658 :
この板誰も人いないけど、他にデータベースの話題扱う場所あるの?

659 :
ここはSQLの板だから
DBは別にあるだろ

660 :
スレはSQLだが、ここはデータベース板

661 :
Oracle 12cでのSQLに関する質問です。

2つのDATE型のカラムの差をhh:mm:ssで出力したいです。


開始日が2018/12/13 7:00:00
終了日が2018/12/17 17:30:30
だとして、この2つの差(経過時間)の出力結果は
106:30:30
と出したいのですが、出来るだけ簡単に計算して出す方法ありますでしょうか?
(時・分・秒でそれぞれ分解して掛け算して計算する方法がネット上にありましたが、もう少しシンプルにできないか模索しています。)
良い御知恵がありましたらご教示お願い致します。

662 :
質問です。
製品のメジャーバージョン、マイナーバージョンという2列があり、
メジャーバージョンが最大の中から、
マイナーバージョンも最大の行を取り出すにはどうしたらいいでしょうか?

postgresql9です。

663 :
>>662
postgresql9手元で動かせません。MariaDBです
テーブル名はproductと仮定しました

select * from product
where (major_ver,minor_ver) in (
select major_ver,max(minor_ver)
from (
select major_ver,minor_ver
from product
where major_ver = (select max(major_ver) from product )
) as t
);

664 :
>>663
なるほど。メジャーの最大グループからマイナーの最大を取った where in句ですか
ありがとうございます。

665 :
window関数使うともっと綺麗に書ける気がする

俺はwindow関数苦手だから書けないが

666 :
>>661
あんたはDATE型が文字列だとでも思っているのか?

667 :
a. 顧客テーブル(顧客コード, 顧客名)
b. 商品テーブル(商品コード, 商品名)
c. 売上テーブル(売上日, 顧客コード, 商品コード, 売上数)

売上日, 顧客名, 商品名, 売上数

このように結果が表示されるSQL文を教えてください

668 :
何か基本のキって感じ
これが書けないとヤバいと思う

669 :
こういうのって内部と外部とどっちで繋ぐのがよろしいの?
それとも、JOINではなくWHERE内でキーを繋いであげればいいの??

670 :
joinを使いなされ

671 :
まだ書かれていない要求仕様があるんじゃない?
読み取れる範囲だとどっちでも良いように思う

672 :
>>667
select 売上日, 顧客名, 商品名, 売上数
from 売上テーブル
inner join 顧客テーブル on 顧客テーブル.顧客コード=売上テーブル.顧客コード
inner join 商品テーブル on 商品テーブル.商品コード=売上テーブル.商品コード

>>669
FROMに複数テーブル書いてwhereに結合条件書くのは今は推奨されない
内部か外部かは、商品テーブルにない商品売ってたり顧客テーブルにない顧客に売ってたりしない限りどちらでも同じ結果
どっちでもいいなら普通は内部結合にするんじゃね

673 :
>>672
ありがとうございます
メモしておきます

674 :
外部キーがあればinnerなければleft joinかな

675 :
このなかで一番美人なのって真ん中だよね?深キョンレベルだと思うのだが
ちなみに向かって右は目も鼻も整形してるって本人が公言してるけどそれ抜きにして誰が一番美人だと思う?
http://bigsta.net/media/1933567086757747003_3564907098

676 :
>>675
ブラクラ

677 :
>>672
そうなのか、勉強になったわー。
講習受けたときはJOINで教わったのに、実際にWHEREで書かれたの使ってる人たちがいて何でだろうと不思議だったんだけど、
歴史的な表記ぶれみたいなもんなんだな。
商品登録がない商品を売ってる可能性とかも全然思いつかなかった。

678 :
>>674
外部キー無いけど繋ぐって、どんなシチュエーション??

679 :
>>677
結合条件をFROM句にしたのは標準SQL。ただ構文が長ったらしいのは失敗だった。

680 :
>>672
推奨されない?

そんな嘘を書くな。

製品によって結合条件の構文の一部が非推奨になっただけ。

681 :
>>677
上の世代からするとなんでFROM句に書きたがるのか疑問なんだよ。

682 :
どのテーブルにも脳死したかのように
createdとupdatedっていうtimestampなカラムがあるんですが普通なんですか?

都道府県テーブル
id 県名  作成日 更新日
1 北海道 2018略 2018略
2 岩手県 2018略 2018略

こんな具合に定数のような項目にもあります

683 :
>>681
結合の条件なのか検索の条件なのかが分かりやすいからだろ

684 :
Whereに結合条件書くと順番が制御できないから外部結合で結果が不定になることがあるってのがあったな

685 :
>>682
テーブル設計の基本ルールとして定めていることは特に珍しくはないと思う
本当に必要か?という議論をすることは可能だが
どっちに転んでも誰も得をしないので誰も言い出さない

686 :
>>682
マスタこそあった方がええで

687 :
普通かどうかよりも、テーブル設計書を見た方が良いかと

688 :
みなさん、UFOはもう見られましたか? 世界教師マYトレーヤは、大暴落のあと出てこられます。
http://rosie.2ch.sc/test/read.cgi/liveplus/1546223584/l50

689 :
>>683
それを言い出すとWHERE句が不要になる。絞り込み条件もFROM句に書けるし、若い人間で知識がないとひとつのテーブルでレコードを絞り込んで結合させた方がいいなどと言い出して、全部FROM句に行ってしまう。

690 :
>>684
根本的にSQLをわかっていない。SQLの書き方で処理が決まるわけではない。

691 :
>>682
自分がシステムのテスト、運用・保守をしていたらわかるよ。複数人でテストをし始めたら、誰がいつ作ったのか、誰がいつ更新したのかわからなくなり、チーム作業が成立しない。

692 :
>>690
>SQLの書き方で処理が決まるわけではない
から、そのときの実行計画次第で結果か変わるって話だけど?
意味わかってレスしてる?

693 :
where句に結合条件を書こうとすると外部結合のとき困るよな
Oracleは(+)を使ってwhere句で外部結合が今でもできるけど推奨してない
SQL Serverでも似たような演算子が昔あったけどもうサポートされてない

694 :
from句は、集合を作る処理で、where句とselect句で選択範囲を決定しているんだろ?

695 :
>>692
製品は人間の感覚を意識して実装されているが、SQLの仕様ではない。

696 :
>>694
RDBの教科書的に言えば直積(from)→選択(where)→射影(select)だな。

697 :
>>695
SQLの仕様的に不定な結果を除去できないから推奨しないって話をしてたんだけど

製品ってなに?SQLが人間の感覚を意識して実装されてるって?
3値論理とか、不定な結果とかが感覚的なのかよ。常人とは違う感覚もってるらしいな

698 :
言うことはわかるが、具体的にどの製品のデフォルト設定を想定しているのか?

外部結合の構文は、どの製品も標準SQLの構文にも対応するが、個々の製品の独自拡張もまた進んでいる。

あなたの言うことで気になるのが、実行計画によって結果がかわるという点で、そんなポンコツ製品は使わない方がいい。

699 :
議論するときはID表示にするかトリップ付けてくれよ
誰が何を言っているか追いかけられない

700 :
>>698
製品がポンコツなんじゃなくて、SQLのあいまいさの問題
まあ俺もかなり信じられなかったからな
実例もどっかで見たんだが見当たらん

AとBを外部結合したものにCを外部結合するのと、
BとCを外部結合したものにAを外部結合するのとでは結果が変わる
whereでの外部結合ではこの違いを表現できん、てな話だったはず

from A,B,Cと書くと、感覚的には前者で処理されると思い込むが
事項計画次第で後者で処理されることもあり得るって話だったはず

701 :
>>700
OUTER JOINが導入される前の外部結合は製品毎の独自拡張なんだから
そこにあいまいさがあるならその製品の問題になるでしょ。
それともOUTER JOINにまだ曖昧さが残っているということ?

702 :
>>701
だからwhereでの結合は推奨しないって話じゃないのか

703 :
「だから」ってのはどこに係ってるの?
>>684が言っているように結果が不定になるというのはどの製品のことかって話なんだけど。

704 :
>>700
外部結合の条件が書かれていない。結合条件が異なるから結果が変わるのを実行計画の違いだと思っているのか?

705 :
>>703
たしかオラクルだったはず
今探しても見当たらん。結構トリッキーなSQLではあった気がするんだが
原理的にwhereで外部結合すればどのDBMSでも起こり得るはずで特定製品の話ではないんだが

>>704
まったく同じSQLで結果が変わる事があるから不定って言うんだけど

まあ俺はwhereで結合する事はそれ以来やめたからもうどうでもいいや
実例だせない時点で説得力低そうだしな

706 :
Oracleなら、解釈があいまいになりそうな記述は最初から弾かれたと思うが。

>原理的にwhereで外部結合すればどのDBMSでも起こり得るはずで特定製品の話ではないんだが

原理的もなにも、SQL標準のfromとwhereだけではそもそも外部結合を表現することはできないんで
各製品が独自に拡張していたわけ。そこに問題があるなら当然その製品の問題。
ってのは上で何度も指摘されているんだが。

707 :
ヒカキンの年収が10億超え!?明石家さんま・坂上忍も驚愕の総資産とは??
https://logtube.jp/variety/28439
【衝撃】ヒカキンの年収・月収を暴露!広告収入が15億円超え!?
https://nicotubers.com/yutuber/hikakin-nensyu-gessyu/
HIKAKIN(ヒカキン)の年収が14億円!?トップYouTuberになるまでの道のりは?
https://youtuberhyouron.com/hikakinnensyu/
ヒカキンの月収は1億円!読唇術でダウンタウンなうの坂上忍を検証!
https://mitarashi-highland.com/blog/fun/hikakin
なぜか観てしまう!!サバイバル系youtuberまとめ
http://tokyohitori.hatenablog.com/entry/2016/10/01/102830
あのPewDiePieがついに、初心YouTuber向けに「視聴回数」「チャンネル登録者数」を増やすコツを公開!
http://naototube.com/2017/08/14/for-new-youtubers/
27歳で年収8億円 女性ユーチューバー「リリー・シン」の生き方
https://headlines.yahoo.co.jp/article?a=20170802-00017174-forbes-bus_all
1年で何十億円も稼ぐ高収入ユーチューバー世界ランキングトップ10
https://gigazine.net/news/20151016-highest-paid-youtuber-2015/
おもちゃのレビューで年間12億円! 今、話題のYouTuberは6歳の男の子
https://www.businessinsider.jp/post-108355
彼女はいかにして750万人のファンがいるYouTubeスターとなったのか?
https://www.businessinsider.jp/post-242
1億円稼ぐ9歳のYouTuberがすごすぎる……アメリカで話題のEvanTubeHD
https://weekly.ascii.jp/elem/000/000/305/305548/
世界で最も稼ぐユーチューバー、2連覇の首位は年収17億円
https://forbesjapan.com/articles/detail/14474

708 :
>>33
これって標準SQLだとどうなる?

709 :
>>708
>>35で[KEY]を"KEY"にすれば標準SQLになると思う
IDが予約語のDBもあると思うが標準では予約語じゃない

710 :
>>709
サンキュー、やってみます!

711 :
row_number()使わないでやってみた

SELECT "TableA".*,"TableB"."ID2","TableB"."DATA" FROM "TableA"
LEFT JOIN (
SELECT "ID",MAX("KEY") AS "KEY" FROM "TableB" WHERE "KEY"<=2 GROUP BY "ID"
) AS a ON "a"."ID"="TableA"."ID"
LEFT JOIN "TableB" ON "TableB"."ID"="a"."ID" AND "TableB"."KEY"="a"."KEY"
ORDER BY "TableA"."ID"

712 :
>>711

MAX(KEY)とWHEREが巧妙ですね

713 :
>>711
検証してみたんですが、
TableBに(8,2,3,'b_key3')を追加し、検索KEY=3にした時、
一番若いKEY=1を持って来れてません

714 :

2より若いじゃ無くて2が無ければ一番若いKEYなのかな
KEY=3,4,5の場合3になる?

715 :
なんかSQL貼り付けようとすると書き込みに失敗する
何故だ

716 :
連投スマン
何度か試したけど直接SQL書くとエラーになるっぽい
https://ideone.com/UrWptx

717 :
>>33みたいに場合分けを含むようなのは素直にunion allでやる方が見通しが良かったりする。
記述は冗長かもだけど。

718 :
>>715
SQLインジェクションって知ってる?

719 :
>>718
最初、>>716の16行目以降のSELECT文を書き込もうとしたら失敗したのよ
>>711だと書き込み成功してるのに何故だろうか?
どの部分が問題になっているか知ってる?

720 :
チェックは途中のクラウドで行っているようです
SQLの特定のキーワードに反応しているみたい
引っかかるときもあれば引っかからないときもある
その辺の基準はよく分からないです
チェックする検査項目が変わるのかもしれない

721 :
>>720
ありがとう

書いてみてエラーになったら外部サイトに貼るしかないか

722 :
手間だけど、それが一番良いと思う
後は全角文字に置換して貼り付けるくらい
汚くはなるけど、説明と合わせて書きたい時は
こうすると良いかな

723 :
初めて質問させていただきます
SQLからPostgresへのデータ移行をC#使ってプログラム作ってます
csv吐き出しで移行させたいんですが、ダブル型のカラムのデータが.000や10.600という形で入ってるのですがどうにか0にする・余計な0を無くすことが出来るのでしょうか?
またそういう事が吐き出しの際指定出来るのでしょうか?
吐き出しはbcpでフォーマットを読ませてます

724 :
FORMAT()関数とか言うのがあるんじゃねぇの?よく知らんけど

725 :
>>723
SQL ServerのことをSQL

CSVファイルのデータをわざわざC#でインポートプログラムを作ってインポート

エクスポートや出力にあたる言葉が「吐き出し」

初心者なのかクソ経験者なのか?

726 :
>>725
自己解決しました
申し訳ない急ぎだったのでそういう書き方になってしまった
C#は移行という一貫性のあるプログラムです
SQL serverからPostgresへの移行と書いてあるように
目的の為の柔軟性もあるという意味合いで情報を付加しただけに過ぎないです

727 :
文字でデータを移行するのに数値型のデータをどう表現するのか指定を行っていない時点で初心者。

728 :
>>726
どういう風に解決したのか書いておいて

729 :
>>727
吐き出しはbcpでフォーマットを読ませてます
>>728
問題は別にありました
思いっきりbcp時にNULL文字の空白が…と警告が書いてあるのにも関わらずNULLIFでRTRIM関数を使用していないことが原因でした
ちなみに.000は0には出来ませんでしたがコンバートで代用しました

730 :
根本的にアプローチ方法が違う様な気がする
山に登るのも好き好きだから
逆立ちして登りたい人もいるだろうし

731 :
>>729
こういう事かな
https://www.ilovex.co.jp/Division/SRD/archives/2008/01/sqlserverbcpnul.html

732 :
SQLパズルって本どうなの?実務で役に立つ?

733 :
>>731
正にその通りでございます。

734 :
今度はbcpの使い方を知らなかったということか。何もかもダメだな。

735 :
bcpの使い方ってよりbcpの相互関係に気付けなかっただけだろ

736 :
>>659
マジかよ

737 :
auto incrementって指定しなくても勝手に連番いれてくれないの?

738 :
多義的質問で回答が難しい

739 :
autoincrementのカラムを何も指定しないでinsertしても入らないのですか?

740 :
それは無理だろう
作成時に指定した制約の範囲で値は入る

741 :
じゃあ空のテーブルに1から連番のidを入れたいときどうしますか?

742 :
取得時に連番を振れば良いので、そもそもの要求が正しくないと考えるべきだな

743 :
>>737
RDBMSによって挙動が違うのでは

744 :
>>742
取得時?自分で連番を入れろってこと?
>>743
postgresqlです

745 :
データベースってどういう仕組みなの?一つのテーブルにファイルどれくらい使ってるの?

746 :
>>744
これは読んだ?
http://www.postgresqltutorial.com/postgresql-serial/

747 :
>>741
必ず連番でないといけないか、まずはそこを考えた方がいい。

748 :
>>744
同時実行時にどうやって連番が振れるのか考えた方がいい。

ユーザーがよく連番にしてくれというが、データそのものが連番を持っている必要はない場合が多い。

シーケンスを使うと歯抜けになるが、歯抜けで何か問題がどうか聞け。

どうしてもやりたければ、番号を管理するテーブルを用意して、一瞬、テーブルをロックして最大値を求めてレコードを追加したり更新したりすることで実現する。

レコードが削除されたときは番号を降り直すのかどうかも事前に聞け。

ユーザーは単に表示されている件数とデータの番号が一致していたら、わかりやすい程度のことしか言っていない。

749 :
>>745
環境とか設定による

750 :
>>746
これが何なのか読んでもわからんすw
というかORM使ってるのでこの型使えるのだろうか
>>747
>>748
確かに連番である必要は無いです
適当に被らない番号を振ってもらえれば良いんだけどそういう句はあります?

751 :
>>750
どういうやり方で最初の空のテーブルを作成してますか?

752 :
>>750
シーケンスを作って、シーケンスから新しい番号を取る。

製品によって異なるから「PostgreSQL シーケンス NEXTVAL」のキーワードでくぐって勉強して。

753 :
>>751
CREATE TABLE prices (
id INTEGER,
date DATE NOT NULL,
market_price INTEGER,
nav_price FLOAT,
retrieval_date DATE,
PRIMARY KEY (date)
)

というSQL です。id をインクリメントしたいんですが 

>>752
ググっても使い方がwかりませんでした

754 :
だめだこりゃ

755 :
>>752
質問をいくつか

idを連番にして一意にしたいって事ですか?

dateをプライマリキーにしていますが、
このテーブルデータのデータを一意に特定したいときに
dateを指定するって事ですか?

756 :
>>755
dateとは?

757 :
date DATE NOT NULL,
PRIMARY KEY (date)

758 :
>>746の回答で終わってる話だし、自分で調べる気がないようだから
これ以上構わないほうが良いぞ

759 :
>>755
date で一意にしたいです

>>758
つまりカラムの型をSEREALにすれば良いんですね PRYMALY KEYにしか使えないんですね

760 :
何をしたいのかがよく分からないけれど
率直に言うと、テーブル定義を見ただけで、これは酷いと思った
ここで質問するにしても基本が出来ていないと
質疑そのものが成り立たないと思う
一つ一つ教えてやれるほど暇な人はここにはいないと思うので
まず自力でテーブル設計の基本から学び直した方が良いだろう

761 :
う〜ん厳しいっすね、
達人に学ぶDB設計指南書
という本を読んで出直してきます
ありがとうございました。

762 :
教えてください。
12c ってWindows10Homeには対応していないのでしょうか?
インストールしようとすると、最初の段階でフリーズしてそのままなんですが。。。
それとも自分のやり方が間違っているのか?

763 :
> それとも自分のやり方が間違っているのか?
Yes.

Oracleに聞け

764 :
>>762
Windows 10 Homeには対応していません。Windows 10 HomeはIT技術者が使うようなものではありません。

765 :
Windows10でも64ビット版なら対応してるみたいだな

766 :
おいおい、そもそも12cってなんだ?

767 :
>>762
Win10Home x64 に Oracle12c 入れてるよ
Release2 だと言うように途中で止まったけど Release1 は最後まで行った

768 :
動くのとサポートしているかどうかは別問題。

769 :
こういう勝手な組み合わせで使って文句をサポートに言ってくる会社は必ずある。

770 :
>>766
視力検査で「みぎ」と言えば視力1.2と判断される。

771 :
【バイトテロ】 くら寿司「法的措置とる」 奴隷DQN「法律が金持ちだけを守るから、テロに訴える!」
https://rosie.2ch.sc/test/read.cgi/liveplus/1550110870/l50

772 :
基本情報の古い過去問のデータベースが解けません。解説してください。
平成18年度春期 基本情報 問1 空欄c 答えは「ア」
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2006h18_1/2006h18h_fe_pm_qs.pdf

SELECT 社員ID FROM 社員表
WHERE 年齢 < ALL(SELECT 年齢 FROM 家族表
WHERE 家族表.社員ID = 社員表.社員ID)

副問い合せ、相関副問合せは理解しています。
副問合せの結果リストが0行の場合、なぜ<ALLの条件が成立してしまうのかわかりません。
oracleの環境で試してみたところ >ALL でも =ALL でも、副問合せの結果リストが0行の場合、真となるようでした。
よろしくおねがいします。

773 :
>>772
ALLは真偽値を返すのではなく、副問い合わせの結果すべてに当てはまるかどうかの条件構文。

774 :
>>772
結果リストがゼロ件の場合は、FALSEでもNULLでもTRUEでもないため、条件そのものがない扱いになる。

775 :
正確には結果が返らないため、どの年齢もTRUEになってすべてのレコードが対象になる。

776 :
SELECT文の結果の対象レコードが存在しない状態はNULLではない。

777 :
>>772
ALLはその副問い合わせが空のときはTrueと決まってるから
イマイチ直感的ではないけど、そう決まってるからしょうがない

条件そのものが無い扱いになったりするわけじゃない
ALL条件はTrue/Falseを返す(この場合はTrue なぜならそう決まっているから)

778 :
皆さんありがとうございました。よく分かりました!

779 :
MySQLの使い方に悩んでる。
WebアプリケーションでToDoリスト作るとして
ToDoリストのデータとして5つのテーブルが必要です。
Aさん、Bさん、Cさんがそれぞれ保存し、各自、自分が登録したToDoのみが見れます。
このような場合、SQLサーバでは、Aさん用データベース、Bさん用DB、Cさん用DBを作成する。
という使い方は変ですか?

780 :
>>779
補足、使用人数は例では3人ですが、100人以上の可能性あり

781 :
ひとつのテーブルで行ごとにアクセス権を設定できるDBMSもあるにはあるけど
(MySQLでできるかどうかは知らん)
アプリケーション側で制御するのが普通
ユーザーごとにテーブルを分けるのは普通じゃない

782 :
MySQLでもユーザー毎にdatabaseを割り当ててアクセス権を設定すれば出来ないことはないが
そこまでする必要があるのって、ユーザーにテーブル作成や削除までやらせたいときくらいじゃないか?

783 :
ありがとうございます。>>779です。
SQLに対してDBを作ったり、テーブルを作ったりするのはToDoアプリ側で、ユーザーはToDoアプリの操作のみです。
アプリの保存データをSQLで管理したいという話なのですが、
こういうときは、データベースごとに分けるのが普通ではないというなら、普通はどんな方法で管理するのでしょうか?
@ 一つのDB内に、Aさんのテーブル5つ。Bさんのテーブル5つ作る 。(テーブルが増えていく)
A 一つのDB内に5つのテーブルがありその中でAさんのレコード、Bさんのレコードを作っていく。(レコードが増えていく)
B 名前をつけて保存で、新しいDBを作りその中に5つのテーブルを作る。(DBが増えていく)

784 :
人が増減するのに合わせてDBやテーブルを増減するのってその管理がまた
大変だろ…。これ言うとここで鬼門の削除フラグが〜になってしまうけどw

785 :
昔、IBMが作ったシステムの設計見たらビューで権限のあるレコードだけ表示できるようにしていた。
そんなんでパフォーマンスが出るのかと思ったけど、結構大規模なDWHでもそこそこの速度が出ていた。
もしかしたらIBMのチューニング力のなせる業だったのかもしれないが。

786 :
>>784 ありがとうございます。ということは、ユーザーの操作により、DBやテーブルの作成はあまりしない方が良いということですね。
アプリ起動時に、DBが無ければ作成したかったんですがそれもやめた方がいいのか?事前に作成しておくのが普通?

>>785 なるほど、ビューを使えば個人毎のテーブルとして扱えるって事ですね。

SQL文は理解したんですが、全体的な使い方がイマイチでして、こういう時に役に立つ書籍が何かあれば教えて下さい…
使い方なんて人それぞれっていうのは分かってるんですが。

787 :
DBMSのことをSQLとか言う奴の相手するなよ…

788 :
>>786
>事前に作成しておくのが普通?
普通は動的にテーブル作ったりしない

>アプリ起動時に、DBが無ければ作成
WEBアプリだよな
アプリってクライアント側かサーバ側かどっちのことを言ってるんだよ
普通クライアントが直接DB弄ることなんかないだろ


つか設計スレいけ

789 :
>>786
ひとりずつ分けて管理するというのは紙媒体の考え方だから、素人がそういう設計を思いつくのは理解できる。

ただし、リレーショナルデータベースの世界では、かなりおかしな発想。

操作できるのが自分のデータのみであれば、自分のデータかどうかどうして区別できないと思うのか?

権限という概念がどうしてあるのか、勉強した方がいい。

790 :
>>688
>>689
ありがとうございます!
もう少し考えて勉強します。

791 :
>>681
横だけど上の世代はWHERE句に結合を書いてたの?

792 :
いわゆる結合条件のことだろう。
θ結合は直積から選択するのと等価なんでSQL89まではそういう風に表現してた。

793 :
Oracleに限って言えばシステム内部で組み込まれてるビューは
今でもWHERE句の結合だけじゃないかと思えるレベル

794 :
>>791
ちゃんと製品のマニュアルを見たことがあるのか?

SQLの歴史上、結合条件はWHERE句に書き、FROM句には書けなかった。

795 :
>>794
マニュアルなんてあるんだ
見たことないよ

796 :
>>794
JOINしか知らねーもん

797 :
>>794
勉強んなるわ
でもFROMに書けるんだから今はWHERE句に書く必要もうないってことだよね?

798 :
最初に現場でoracleを習って
そこでは(+)が多用されていた
その後外部結合というのを習ったけど
join句、いまだに使い方慣れなくて困る

799 :
へぇー
じゃあぶっちゃけ今はJOINから入っちゃった方が無駄がないのかな?

800 :
初心者はまずJOINだけを覚えた方が良いと思う

801 :
>>800
おけ

802 :
社員テーブルに以下の5カラムがあります。すべてnot nullカラム。
社員id(主キー)、氏名、所属部署、入社年度、生年月日
社員idはランダムで採番されます。

このとき、
所属部署ごとに以下を満たす1人の氏名と生年月日を抽出するとき、
どのようなSQLが考えられますか?
・入社年度が最も過去
・それが複数人居る場合は、その中で社員idが最大の社員

お力添えよろしくお願い致します。

803 :
FROM 社員テーブル T1
WHERE NOT EXISTS (
SELECT * FROM 社員テーブル T2
WHERE T2.所属部署 = T1.所属部署
AND (
T2.入社年度 < T1.入社年度
OR T2.入社年度 = T1.入社年度 AND T2.id > T1.id
))

804 :
>>803
www

805 :
803さんのはまだ試してないですが、
group byとhavingで2回絞るのは無理ですかね?

806 :
>>802
つかってるDBMSかけ

SELECT * FROM(
SELECT
ROW_NUMBER() OVER( PARTITION BY 所属部署 ORDER BY 入社年度,社員id DESC) as 順位,
*
FROM 社員テーブル
) t
where t.順位=1


ウィンドウ関数使えないようなら、サブクエリ3段とかで出来そうだが

807 :
>>806
ありがとうございます、勉強になりました。
SQL serverです。

808 :
MySQLで

select max(`社員id`),`氏名`,`所属部署`,`入社年度`,`生年月日`
from `社員テーブル`
where (`所属部署`,`入社年度`) in
(select `所属部署`,min(`入社年度`) from `社員テーブル`
group by `所属部署`)
group by `所属部署`;

809 :
>>806
Row_Number wwwwwwwwwwww

810 :
>>806
そういう使いもんならないの教えんのやめ

811 :
これから仕事で必要になるためSQL勉強しています。
皆さんはどうやって勉強していますか?

現在SQLBoltってサイトで勉強しています。
覚えが遅いためなかなか覚えられません。
一応ExcelのVBAはできます。
勉強法がわからないのでAccess VBA Standardの資格で勉強した方がいいでしょうか?

812 :
プログラム言語と違って、何か適当な例題があるわけじゃないし、
割と実践的に体で覚える感じでした
SQLを使用するソフトによって多少、あるいは大きく違ったりするので
SQLをどういう所で使いたいか、ソフトに何を使うかを見極めて学習すると
効果的かも知れません
それから、SQL言語はVBAとは異なるものです

813 :
>>811
今どんなことやってるん?

814 :
>>812
使いものになるまでの所要期間だいたいどれくらい?

815 :
命がけで取り組めば半年もあればなんとかなります

816 :
>>815
すみません横から失礼いたします。
業務上必要に迫られ勉強することになりました。
環境は会社で用意されてますが前任者が居なくなってしまう為、ゼロから始めて1ヶ月半でモノにしろと言われています。
命がけで半年ですか…胃が痛くなってきました。
1ヶ月半など無茶苦茶な要求と言えそうですね(泣)
ちなみにエンジニアさんですか?当方非エンジニアです。

817 :
複雑さの程度にもよりますから
簡単なものでしたら、1か月も掛からずに習得は出来るでしょう
担当する業務の内容次第です

818 :
>>817
レスありがとうございます。
段階にもよりますね。
予定されているものを見たところサブクエリ5〜7つ、最後で結合するという説明でした。
かなり長くこんなの書けるのだろうかと気が遠のきました。
テーブルの挿入などはなさそうです。

819 :
>>812
私はあまり覚えがよいほうじゃないので、業務が始まる前に
勉強して基本的な知識をつける予定でしたが、
やはり実務をこなして体で覚えるほうが早いのですね。
レスありがとうございます。

>>813
レスありがとうございます。
ゲーム会社で簡単なデバック作業をしています。

SQL覚えるのに半年もかかるのですね。
皆様色々教えてくれてありがとうございます。

820 :
>>819
818です。横から質問奪ってたいへん失礼しました。
ちょうど同じような境遇でしたもので。
思ったよりもSQLを身につけるのは時間がかかりそうで覚悟せねばと思いました。
お互い頑張りましょう。

821 :
>>820
いえいえ失礼なんて、とんでもないです。
私もSQLを覚えるのがこんなに時間がかかるとは思いませんでした。
大変だと思いますが、お互い頑張りましょう。

822 :
>>811
仕事で必要になるならその仕事で使うDBMS使えばいいと思うが
大抵のDBMSは無償版提供してるし

823 :
このスレの先頭、>>3-10辺りをすらすらと書けるようになれば
大体の業務はこなせるんじゃないかな?w

824 :
分からなくなったらここで聞いてみると良いですが、
その際に、ソフトに何を使っているかを書いて欲しいです
ソフトによって使えたり使えなかったりするものがあります

825 :
Sybase ASEだとOLAP関数サポートなく、
806さんのムリでした

一番エレガントだと思ったのに

826 :
初心者の質問続きとなっているようですみませんがお願いします
「SQLの基本構文を書くことができる」というとどういった範囲になりますか?

827 :
>>803
望んだ結果が出ました。
ありがとうございました。

社員テーブルに該当するものが複数テーブルから構成されたサブクエリだとかなり重くなりました。

828 :
Select文のasに( )を使いたいのですが、どうかけばいいでか?

829 :
ダブルクォートで括るのが普通だが
角括弧やバッククォートを使うDBMSもある

830 :
>>828
そういったあんた個人のわがままが通ったとして、
で、ユーザー(つまり結果)に優位性があるのか?

831 :
>>829
レスありがとうございます。
使ってるのはpostgresqlてすが、" ではダメみたいです。

>>830
As 時間 としていたところ、ユーザーから 時間(分) と表示して欲しいとの要望かありました。
()は特殊な文字てあることは理解していますが、何らかの策があるのではと質問したのですが。あまりに非常識なようでしたら諦めます。

832 :
postgresなら"でいいはず
なんらかのプログラミング言語を介して使っているなら
そのプログラミング言語に対して"をエスケープしなければならない

833 :
>>832
すみません、アホなことしてました。
時間"("分")" って…
"時間(分)"でokでした。

834 :
まもなく日本から世界経済が崩壊し、世界教師マYトレーヤとUFOが出てくる。
それからベーシックインカムがはじまるので、20年間ヒキコモリの人でも死にはしない。
むしろ、心配するなら被曝のほう。

【メルトダウンA級戦犯】 『非常用発電機』安倍が放置  『非常用空冷回路』小泉が撤去  死刑求刑
https://rosie.2ch.sc/test/read.cgi/liveplus/1552357792/l50

835 :
ロジックどこまでSQLにするのが正解?

836 :
>>835
できるだけSQLには詰め込まない。

837 :
何個までテーブル結合する?

838 :
>>837
必要なだけ
経験としては10個ぐらいまでやったことある

839 :
テーブル
No1 No2 No3 No4 No5 No6 No7 No8
data1 A B A A A C B A
data2 A A A A A A B B
data3 C C C A B A A A
data4 A A C C A B A B
data5 A A B A A B B A
data6 A C C A C C A A

ほしい結果
A B C
data1 5 2 1
data2 6 2 0
data3 4 1 3
data4 4 2 2
data5 5 3 0
data6 4 0 4


横方向にA,B,Cの数をカウントしたいですが、SELECT文のみで実施するとしたらどういったクエリになりますか?
oracle12です。

840 :
>>839
Excelでやれば?

841 :
select
No1,
((case No2
when A then 10000
when B then 100
when C then 1
end)
+(case No3 ……)
+……)
from テーブル

842 :
>>839
スマホだから試してないけど
(セレクトはselectに置換えてくれ)
セレクト
T.data as data,
sum(case T.NO when 'A' then 1 else 0 end) as A,
sum(case T.NO when 'B' then 1 else 0 end) as B,
sum(case T.NO when 'C' then 1 else 0 end) as C
from (
セレクト data, NO1 as NO from table
union all
セレクト data, NO2 as NO from table
(* 中略 *)
union all
セレクト data, NO8 as NO from table
) T
group by T.data

843 :
>>840
>>841
>>842
レスありがとうございます。

>>841
ちょっと理解できませんでした。

>>842
やはり、UNION ALL使うぐらいしかないんですね。
少し調べて全く同じものまではたどり着けました。
NOが200ぐらいあるのですが、テーブルの設計自体を見直したほうがよさそうですね。

844 :
>>843
そもそもその表で管理しようとしているところが天才

845 :
>>839
これはPostgreSQLだけどoracleにもUNNESTはあったように思う
無かったらスマン
https://rextester.com/VNEZX24470

846 :
>>845
ありがとうございます。
ちょっと調べてみます。

>>844
うん。わかってる。
ほんとはこういったテーブルにしたいのだけど、毎日のレコード数が凄いことになっちゃうなーって。
別に集計されたテーブルを作ることを検討します。

data_ No rank
data1 No1 A
data2 No1 A
data3 No1 C
data4 No1 A
.
.
.
data1 No8 A
data2 No8 B
data3 No8 A
data4 No8 B
data5 No8 A
data6 No8 A

847 :
>>846
> 毎日のレコード数が凄いことになっちゃうなーって。
どんなシステムかわからんけど今時そこら辺のPCでも100万レコード程度は普通に扱えるしOracleでそこそこのサーバー入れてりゃ1億件程度でも破綻しないよ

848 :
>>847
1次元配列だと200万レコード/日ぐらいが想定されるので、少し厳しいのかなと感じています。
集計前・集計後のどちらもが必要なので、各々のテーブルを作るのが良さそうですかね。

849 :
項目にsumA、sumB、sumCを追加しておいて
レコード挿入時に集計しておけば良いのではないか?

850 :
要件後出しかぁ

851 :
select
No1
,decode(No2,A,1,0)+decode(No3,A,1,0)+…+decode(No8,A,1,0) As Acnt
,decode(No2,B,1,0)+decode(No3,B,1,0)+…+decode(No8,B,1,0) As Bcnt
,decode(No2,C,1,0)+decode(No3,C1,0)+…+decode(No8,C,1,0) As Ccnt
from テーブル

852 :
20年前のPCの感覚で考えているんだろうな。しかも巨大Excel風がお好みらしいから無視が一番。

853 :
糞メーカー製品のせいでテーブル変えられないって訳でもなく、自分でそういう設計にしてるならしょうがないね

854 :
decodeとかOracleしか使えないのよりcase when
で記述していったほうがよくね

855 :
いじめはどこの町にもあるが島本町は特に酷い
「大阪府三島郡島本町のいじめはいじめられた本人が悪い 」なんて
公言する町は他に無い

856 :
Oracle 12 なら VARRAY とかでもいいかも
ただ操作する関数は貧弱なのでストアド必須になると思うが

857 :
>>856
知識がないのになんで無理やり書き込むの?

858 :
Postgres11を使用しています。

3700万行程のテーブルの中途半端な位置に行を追加したいのですが、
通し番号の昇順を維持するにはどうすればよいでしょうか?

こんな構造です。
----------------------------------
主キー | 本文(最大3MB程度)) | 通し番号
----------------------------------

今はこうなっているとします。
--------------------
0001 | あいうえお | 0001
0003 | さしすせそ | 0002
0004 | たちつてと | 0003
--------------------

ここに、1行追加して、以下のように変更したいです。
--------------------
0001 | あいうえお | 0001
0002 | かきくけこ | 0002
0003 | さしすせそ | 0003
0004 | たちつてと | 0004
--------------------

859 :
>>858
この穴埋め問題はよく話題になるんだけど、やりたいなら最初からそう設計して採番しないとキレイにできないんだよ。後からやるならアプリ側で調整したほうがうまくいく。主キーならとくに。

860 :
>>858
UPDATE テーブル
SET 通し番号=通し番号+1
WHERE 通し番号 > 2
とかではなくて?

861 :
>>858
update テーブル t1
set 通し番号 = (select Rank
from (select 主キー,
Row_Number() over(order by 主キー) as Rank
from テーブル) t2
where t1.主キー = t2.主キー);

862 :
>>857
煽りたいだけのバカは黙ってて

863 :
主キーには空きがある前提なのか?
その例だと通し番号要らんように見えるぞ

864 :
超初心者の質問で申し訳ないですが

SQLで
顧客情報、順路表から計算して
申請書を作る
医療関係のデータベースは作れますか?

865 :
>>864
要件が不足しています
計算とは?

2つ表から単に申請書に必要なデータを抜いてくるだけなら当然つくれます

866 :
>>865
すいません

もう少し詳しく書くと

■顧客情報
A受けている治療内容 (〇〇円)
■順路表
B患者を何回いった(〇〇回)
C前の患者との距離(〇〇km)
■申請書
A、B、Cの数字を元に
四則計算して
それぞれの箇所に数字を入力
して申請書を作成
できるデータベースです

867 :
>>865
あと
順路表を前月と同じ内容を
翌月にコピーできますか?

※4/1(月曜) Z→E→F
4/2(火曜) L→E→M
なら
5/6(月曜)) Z→E→F
5/7(火曜)L→E→M

868 :
>>865
現在はEXCELでやっていて
重すぎるので何か手はないか
と考えているところです

869 :
SQLでできるかというより
これは医療向けアプリじゃないの?
ACCESSで作れますかという話かね
索引とか使えば検索を早くできるからたぶんマシにはなるしデータの複製もできる

発想を跳躍させて
Z、E、Fとか未定義で最短経路問題なのかすら怪しいけど
経路ならグラフデータベースとかある

870 :
>>869
返信ありがとうございます

Eさんの4月分の申請書を作成するときは
4/1はZ→Eの最短距離
4/2はL→Eの最短距離
で計算します

※Excelでは最短距離だけのシートがあり
Z→Eとすると4/1は最短距離だけのシート
から情報を抜き出しZ→Eの最短距離で計算します

Accessで作れますか?
調べたら
Excelと同じOfficeですし
SQLもあるそうですね
それと
検索機能とかでスピードアップ期待
データの複製はしやすそうですね

871 :
現状のスタイルを頑なに守るよりも、市販のパッケージに業務形態を合わせたほうが幸せになれると思う。

872 :
SELECT key, 名前, 住所, 電話番号
FROM usertable
WHERE (key = (SELECT MAX(key) AS EXPR1 FROM usertable usertable_1))

このSQLは何をしているのでしょうか?
特に、EXPR1が分からないのと、FROM後に、DBには存在しないusertable_1というテーブルが指定されているのが理解出来ません。

873 :
>>872
EXPR1はMAX(key)の項目名、
usertable_1はusertableの一時的な名前
と名前を付けているだけです

このSQLの場合は特に名前を付ける意味はありません

874 :
>>872
無駄なテーブル別名、カラム別名があり、さらに無駄な括弧がある。

こうなった経緯は読み取れない。

875 :
項目別名はけっこうasつけるひと多いな
テーブル別名にはみんなつけないけど

876 :
テーブル別名にAsあったっけ?

877 :
>>871
ならない
他業界しかやってないやつに
現場の気持ちはわからない

どんなソフトよりも
自分のExcelが一番
今後さらに良くするための質問

878 :
SQL標準では昔から列別名もテーブル別名もASをつけて良いのだが
なぜかOracleでは昔からテーブル別名にASをつけられない

879 :
>>878
それは誤り。Oracle Databaseでは特定のバージョンだけASを使用できないものがあった。

880 :
どのバージョンなら使えるのかひとつでいいので例を挙げてくれ
少なくとも最新版18cでは使えない
https://docs.oracle.com/cd/E96517_01/sqlrf/SELECT.html

881 :
ExcelのクエリはASで別名付けても無視するのが残念

882 :
>>881
ExcelのSQL操作はおまけ機能みたいだからなあ。特定の文字が使えなかったりとタチが悪い。

883 :
すまん。現行バージョンでは反映されてた。

884 :
>>883
現行バージョンとは何?

885 :
ORACLEの現行つったら18c

886 :
Excelの話じゃないのか?

887 :
国語の勉強しましょう

888 :
そもそもデータベースが何かを理解してないな
表計算ソフトとは別物
計算や出力が必要ならプログラム書く必要がある

889 :
ウェブのニュースを集めてとにかくデータベースに放り込み必要なものを取り出すことをしていたのですが
先日からこのようなエラーが出てデータを取り出した結果が取れなくなりました
データが取れることもありますがたまにうまく行くといった感じです

エラー:[MySQL][ODBC 5.3(w) Driver][mysqld-5.7.16]Query execution was interrupted, maximum statement execution time exceeded
コード:80004005
ソース:Microsoft OLE DB Provider for ODBC Drivers

データベースのサイズは2GBくらいあります。設定等々は変えていません
SQLサーバーのエラーログにエラーは見当たらずいろいろやりましたが困っています
解決方法を教えてください

890 :
クエリを飛ばして30秒ほどでエラーが返ってきます
エラーコードで検索してnet_read_timeoutをいじったり
/*+ MAX_EXECUTION_TIME(1000) */を入れてみたのですが結果は変わりません
データベースの行数は680421です
よろしくお願いします

891 :
時間かかり過ぎじゃね?

892 :
ありがとうございます。どうすればいいですか
クエリを変えるか、データベースの設定をいじるか調べてみましたがわかりません

893 :
>>889
>エラー:[MySQL][ODBC 5.3(w) Driver][mysqld-5.7.16]Query execution was interrupted, maximum statement execution time exceeded
>SQLサーバーのエラーログにエラーは見当たらず

なに使ってるかしらんがそのDBMSのスレで聞けや
このスレタイで言ってるSQLはMySQLのことでもSQLサーバーのことでもないぜ

894 :
sqlの元号対応

895 :
>893
sql晒してみれば?
ココ、sqlスレだし

896 :
ありがとうございます。SQLは以下です。範囲を短くしても長くしても前述のエラーが出ます
SELECT * FROM table1 where input_time BETWEEN '2019-05-01 00:00:00' AND '2019-05-01 00:10:00';

897 :
データ件数はどの位?
インデックス張ってる?

898 :
>>896
input_timeにインデックス張ってる?

899 :
>>897
ありがとうございます!データの件数は68万です。
input_time日インデックス張ってみます

900 :
60万件もあるとインデックス張らないと辛いな

901 :
MySQL 総合 Part26 [無断転載禁止]&#169;2ch.sc
https://mevius.2ch.sc/test/read.cgi/db/1499949595/

902 :
>>899
そのカラムは文字列なのか?

903 :
>>902
いえ、DATETIME型になります

904 :
>>889 これが元の話だけど、問題の切り分けが全然できてない。

「SQLサーバー」とは何?

905 :
単純すぎて固有のチューニングの域だな

906 :
>>904
SQL Serverじゃないの?違うの?

907 :
文脈から読み取る限り、違うだろう

908 :
>エラー:[MySQL][ODBC 5.3(w) Driver][mysqld-5.7.16]Query execution was interrupted, maximum statement execution time exceeded
>コード:80004005
>ソース:Microsoft OLE DB Provider for ODBC Drivers

この通りなんだろう。(Microsoft) SQL ServerではなくMySQL
それを動かしているPCを指してSQLサーバーと言ったんだと思う

909 :
www

910 :
まあよくわかってない人がデータベースとSQLをごっちゃにしちゃうとかはありがち
>>893がちゃんとログをコピペしてる所はほめていいと思う

911 :
昨日はありがとうございました。>>908はその通りです
インデックスを張ると今度は要求された名前、または序数に対応する項目がコレクションに見つかりません
のエラーが出るようになったのでインデックスをちゃんと張る所からやってみようと思います
ひとまずありがとうございました

912 :
>>888
Excelからデータベースに対してSQL文を投げて、結果をワークシートに取り込むまでの機能の話だろ。
かなり初期からある機能だぞ。

913 :
ガチ文盲なのか?

914 :
>>912 大丈夫?

915 :
UPDATE のときのテーブル名に正規表現またはワイルドカードを使う方法を教えてください。
例えば、table_a_001〜table_a_100が合った場合に、「table_a」が含まれるテーブルだけ一括でupdateしたいです。

イメージ的にはこんな感じに
UPDATE `table_a_*` SET `type`='hoge'

宜しくおねがいします。

916 :
>>915
ないです

917 :
>>915
> 例えば、table_a_001〜table_a_100が合った場合
その時点でおかしいから設計を見直せ
どうしてもしょうがない場合はテキトーなスクリプト言語でSQLを生成して流せ

918 :
金と技術力がないと運用にツケがまわるよくある悪例だね

919 :
テーブル名の001〜100に意味があるなら、その値を項目に追加して
全部を一つのテーブルにまとめてしまえばどうかな?

920 :
001〜100は例えで書いたんですけど、実際は日付なんです(_20190510)みたいな
その日付ごとにけっこう大きなデータがあるので日付で分けてるんですが、SQL文だけでtable_aのみを絞るのはやっぱり無理なんでしょうか?
おっしゃるとおりで設計が間違ってるんでしょうけど

921 :
日付をテーブル名にするようなデータベースで
その後に更新が必要になるって何かが変だと思う

922 :
>>920
ストアドプロシージャで動的sqlでも使わない限り無理です

923 :
性能的な問題でやっているんならパーティショニングが使えないか検討するところだね。

924 :
なんたるExcel脳

925 :
量が多いからテーブルを分けるというのが、わからんな。
処理速度の問題だとしたら、インデックス付けてないとかw

926 :
>>920
ひとつのUPDATE文で済ませたいという点からして、トランザクションの概念がないのがわかる。

927 :
>>920
データ量が多いという認識がそのものが間違っている。

本当にデータ量が多いシステムを担当しているのなら、こんなところで質問してこない。

928 :
質問者をあれこれ詮索するの、感じ悪い
提案までにしとこうよ

929 :
自分からはなんの提案もなく優等生ぶるのも同類な

930 :
このスレッドそのものが、ずっと初心者スレになっているから仕方ない。

シェルスクリプトのスレッドでも一発コマンドでできないかと、しつこく質問してるやつがいる。

プログラマがプログラムを作っているのに、なぜかひとつの文に収めないといけない思想信条があるようだ。

こういうのは無視するしかない。

931 :
ワンライナーは個人の趣味であって必ずしもソレに付き合わされる必要はないな

932 :
PHP&MySQLの環境です。

ユーザーID
ポイント
を項目にしたテーブルがあるとします。
ユーザー間で破綻なく自由に任意のポイントを送受信するにはどのようなコードを作成すればよろしいでしょうか?

また、DBサーバが複数ある場合で、同様にDBサーバ越しでも同様のことをしようとするとどのようなコードになりますでしょうか?

秒間数千、数万の処理を行いたいです。
ご教授お願いいたします。

933 :
なぜこの程度の知識しかない奴がこんな作業をさせられるのだろうか

934 :
PHPしか書けないような聞き方っぽいのに
XAトランザクションで秒間数万ね
人をすり潰していたITバブル期みたいなブラックだね

http://q.hatena.ne.jp/1217036141

935 :
超初心者ですすいません
likeとisと=の使い分けが分かりません
inの前はlike、nullの前はis、データ型が数字だと=であってますか?

936 :
なんか1つもあってないような気がするな

"is null" と "is not null"は単語じゃなく文でワンセット
文字の比較でも =
in の前は like ... え?

937 :
すいませんありがとうございます
比較の時に、=を使ったりlikeを使ったりが、使い分けがわからないのです
isが出てくるのは、isnullとisnotnullだけですか?

938 :
一体、何を読んだらわからなくなるんだよ
https://www.atmarkit.co.jp/ait/articles/1201/13/news140.html

939 :
超初心者なら、慣用句みたいに暗記した方が良いかもよ

940 :
like……文字列の部分一致検索につかう
=……完全一致検索
is……null比較の構文の一部

nullの扱いはシステムによりけりなのでシステムごとに調べること

941 :
なるほど、ありがとうございます
ここの方々はエンジニアですか?
自分はマーケティングの担当で自分で使えた方が便利ということで覚えようとしてます
セレクト文しか使わないのですが、色々な条件で、いつ誰が何を買ったとか抽出したく、サブクエリがうまく使えるようになるのが目標です
またアドバイスいただいてもいいですか

942 :
SQLの書き方なら、ここで聞いて良いですよ

そういう質問を、みんな待ってますから

943 :
SQL書かなくてもデータ分析できるツールあるからそれ使う方が良いんじゃない

944 :
ここにかぎらず不思議なのは2chのスレッドは探せるのに、SQLを解説しているWebサイトや、そのへんに転がっている書籍は視界に入らない人間がいるところ。

945 :
>>944
> SQLを解説しているWebサイトや、そのへんに転がっている書籍
そう言うのは能動的に探さないと駄目だから
エスパー機能付きのWebサイトとか書籍があればいいんだけどw

946 :
BIツールは入ってますがSQL使うこともあります
いつもはデータ抽出を社内SEの人に頼んでますが、簡単なものは自分で出せた方が仕事のスピードが上がるので覚えようと思っています
本やサイトも使っていますが、どうしても途中で分からないところが出てしまって、よければ御指南ください

練習問題をやっていて、以下のような内部結合を書いたのですがデータが返ってきません
PublisherテーブルにIDとNameがあって、IDがBookテーブルのPublisher_IDとつながっています
山田さんが書いた本についてすべての情報を抜き出したいです
SELECT *
FROM Book
inner join Publisher on Book.Publisher_ID=Publisher.ID
WHERE Publisher.Name='山田';

947 :
Publisher.Name って名字しか入ってないの?

948 :
>>946
Publisherには'山田'ってデータがないんじゃない?
よけいなことだろうけど、
Publisherって言うと出版社のことだと思う
著者ならAuthorにしたいところ

949 :
>>946
連結する場合select でアスタリスク使わない方がいい
連結側に同じフィールド名があるとエラーになるのでasで別名にしないといけない

950 :
>>946
SQLは問題ないみたいだから
Publisher.Nameに山田があるか確認するために
まずそのSQLのWHERE句をはずしてどういうデータがあるかを見たほうがよいのでは?

951 :
>>946
テーブル定義 (CREATE TABLE文) を見たいな

952 :
946です、みなさんありがとうございます
SQLはあってるんですね、よかったです

模範解答は>>949さんが書いてくださってるように、asでテーブルすべてに別名をつけています
テーブル名を指定するときは、別の名前を付けた方がいいんですね
これからやってみます
 
またよろしくお願いします

953 :
microsoft sql server 2008

テーブル同士を結合するとき、char型の項目とvarchar型の項目とで
結合するときはconvertで型を合わせる必要があるでしょうか?

この項目はマスタテーブルの主キーなのですが、
伝票テーブルに外部キーとしても存在します。
伝票側の項目には必ずしも値が入るとは限らず、空白も存在します。
そのためマスタテーブル側をchar型に、伝票テーブル側をvarchar型にし、
それぞれで外部結合します。

954 :
https://docs.microsoft.com/ja-jp/sql/t-sql/data-types/data-type-conversion-database-engine

955 :
そもそもなぜ型を合わせないのか
値がないなら、空白じゃなくてNULL入れろよ

まあ世の中にはNULLと空白を区別できない欠陥DBもあるけどなw

956 :
主キーにする項目に、値が入らないとか、調布市議

957 :
キーにしてるから空白

958 :
NULLと空白を区別できない欠陥DBなんかあるかな
長さゼロの文字列とNULLを区別できない欠陥DBなら知ってるけど

959 :
空白と空文字列を区別できない欠陥PGなのでは?

960 :
NULL不許可にしてるんでしょ
NULL撲滅委員会とかあるし

961 :
>>958
長さがゼロの文字列だったら、それはNULL値。これが本来のデータベースの定義。

962 :
長さ0の文字列と=で比較しても良いのかな?

963 :
長さゼロの文字列とNULLを区別しないのは
Oracle Databaseの有名な欠陥であり
それはOracle社自身も認識していてマニュアルにも書いてある

https://docs.oracle.com/cd/E96517_01/sqlrf/Nulls.html
> Oracle Databaseは現在、長さが0(ゼロ)の文字値を
> NULLとして処理します。ただし、将来のリリースでは
> この処理が変更される場合があるため、空の文字列を
> nullと同じように処理しないことをお薦めします。

964 :
脱Oracle
それがbest

965 :
>>963
> ただし、将来のリリースでは
> この処理が変更される場合があるため
まあ、どう見ても無理だろw

966 :
かなり昔からそういってるからなぁ
そのうちVarchar3型つくるんじゃって話もある

967 :
Oracleを選ぶメリットがなにもない

968 :
欠陥であることは分かってるんだけれども
直しちゃうと既存のアプリケーションに甚大な影響が出るんで
直すに直せないんですよー
という気持ちがありありと分かるマニュアルだねえ

969 :
つーか null と空文字列を同一視するというのは極めて常識的な挙動であって
標準SQLの方が時代遅れと言えるのでは

ここはもう標準を変更してnullも空文字列も、ついでに空白だけのカラムもすべて同一視するようにすべき
null は is で比較するとかいう無意味な制限も廃止して全て = の比較に統一すべき

とするのはどう?

970 :
こんなところでそんなアホ丸出しの提案して
何かが変わると本気で思っているのか

971 :
釣りなんだろうな

972 :
空文字列とNULLが混在して混乱を招いているシステムは多い。

973 :
空の文字列とNullを同一視するのが常識とかないと思うんだが
データベースしか触らんやつはそういう常識なの?

974 :
Oracle社員?が荒らしてるだけ

975 :
ホントOracleはシステム開発者にとってマイナスなことしかしないよね

976 :
特定のDBしか触らない奴だとそれが常識だと考えるかも
その場合は、そいつには触らない方が良いと思う

977 :
ぬるい質問ばかりで暴れたくなった
相手はどのDBでもよかった

978 :
>>973
例えばC言語で空文字列とnullが同じと言ったらそりゃ変なんだが
抽象度が高いSQLで区別する意味は全くないと思うんだよね
むしろ区別することが当然と考えること自体が何か洗脳されてるという気がするわけ
まあ釣りではあるのだが

979 :
全項目NOT NULLにして集計処理の手間を減らすことはあるな
CSV/TSVを外部テーブルで使うとNULLが使えないことがほとんどよね

外部結合して片側NULLで引っ掛けるのはよく使うから
NULLの概念自体はあってほしいけど

980 :
nullと空文字列が区別できなくて良いってやつは、nullが値ではないって概念が理解出来ないんだろうな

981 :
後釣り宣言だっさ

982 :
>>980
その概念に実用性はあるのか?
それで何か便利なことがあった?
むしろ不便であって弊害しかないオナニー概念だと思うのだが

いや >>970 の言う通り、ここで言っても仕方ないことは分かってるけどね
たまには王様は裸だと言って見たくなる

983 :
あえて釣られてやるけど、例えば未入力と空文字の入力を区別したいとか普通にあるだろ

984 :
>>983
あるか? そんなの
空文字の入力は未入力でいいんでわ

985 :
未入力よりも未設定ってことでは

986 :
>>985
空文字の入力を未設定と区別する必要があるのかね
それを区別しようとすることでシステムは複雑になり間違いも多くなる

987 :
セルの値としてはどうかわからないが,テーブル結合後の名テ―ブルの行の属性値としては有りだと思う

988 :
>>987
そうかねぇ
むしろ使い分けする運用こそ危うい気がするのだが

989 :
整数値カラムでouter joinしたとき
存在しない行の整数値カラムの値は
何になるのでしょうか?

990 :
>>988
バカが使えばどんな道具も危ないからな

991 :
次スレ

SQL質疑応答スレ 19問目
http://mevius.2ch.sc/test/read.cgi/db/1558610740/

992 :
間違えた

SQL質疑応答スレ 19問目
https://mevius.2ch.sc/test/read.cgi/db/1558610740/

993 :
>>992

乙です

994 :
どうしてオラクルは、ああいう苦しいコメント出しているの?

995 :
「sqlなら曖昧でよくね?」っていうけど
連携するプログラム側が困るんよね。それじゃぁ

運用担当がデータ見るだけに使うなら
テキトーでも許されるのかもしれんけど

996 :
NULLとかnilとかNoneについては、「値ではない」という説明の仕方より、「あくまでも値だけど、約束事として、(概念的に)値なしと呼びうる状況(の一部)に対応する値として利用できる特殊な値」という説明の仕方の方が誤解を招きにくいんじゃないか。
たとえば、空の配列の長さが0、Noneが1個入った配列の長さが1という言語で「Noneは値ではない」という説明はしづらい気がする。

結局、(概念的に)値なしと呼びうる状況のうち、どれにNULL/nil/Noneを対応させて、どれに空文字列・空配列を対応させるか(undefinedがある言語についてはそれも)というマッピングを整理しておくべきという話かなと思うが。

997 :
値とは何んなのか?

998 :
頭ぱっぱらぱーのウチの運用が言いそう

999 :
999

1000 :
1000

1001 :
2ch.scからのレス数が1000に到達しました。

【安易ダサすぎ】データベース→DB→ドラゴンボール
デフォルト名無しネームを決めるスレ
制約っていらなくね?
ここはデータベース板です
MSDEよりいいDB、ありませんか?
【KVS】 Key-Value Storeを勉強するスレ
データベース技術を勉強したいのですが…
彼女にINSERT権限がありません
MQ板もつくれ
OODB - オブジェクト指向データベース
--------------------
James Bond - 062 007シリーズ
【茨城】「意外と近い」土浦に移住を 都内でPRへ 今月25日、2月にも
ベンジャミン・フルフォード 45
【リプ】QunQun part,11【ファボ】
Y!mobile ワイモバイル 総合スレ 161通話目
bトッド・マクファーレン総合スレ1
日曜日や休日が終わる夜にageるスレッドpart118
ゴーストトリックのリンネは何度死ぬんだカワイイ
【批評】『銀河英雄伝説』は単なる宇宙戦争にあらず、現代政治の闇を突く[07/29]
第18回名古屋モーターショー
イスラエル、日韓からの入国拒否を撤回
【朝日新聞】韓国のPCRキット支援、菅氏「具体的なやりとりない」 [4/27] [新種のホケモン★]
日銀、ETF貸し付け12日に開始 [雑用縞工作★]
真救世主は日本から現れる25
東京都期限付任用・産育休代替教員(臨時的)14
コロナで塾死亡
【関東甲信】16日も37度を超える猛烈な暑さ 熱中症警戒
【悲報】月曜日の気温がヤバい 最高36度 [981135823]
【駒澤】まさかの予選会へ
【中央日報】 韓国取引所、コスダック市場サイドカー発動 [08/05]
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼