SQL初心者質問スレ [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
スレなかったっけ、、、と探したら無いな、、落ちたんかな 外部の利用者が自由にテーブルを追加できるシステムを sqlite で検討しています。
テーブルが重複しないように利用者番号をテーブル名のプレフィックスにつけようと思います。
もしも、同じようなシーンでの一般的な方法などありましたら教えてください。
よろしくお願いします。 >外部の利用者が自由にテーブルを追加できるシステム
が一般的な使い方とは思えないのに一般的な方法とか... >dbはどう?
この意味がよくわかりません。すみません。
利用者ごとにというのは、少し誤りでした。
正確にはプラグインとして db を操作するモジュールを追加できる仕組みです。
そのモジュールから db に対して create table もできるようにしたいです。
そのときにテーブルの名前の重複を避けたいので、質問させていただきました。 sql というよりはそのモジュールの運用方法の話のようだな 1つのファイルのほうがユーザが使いやすいかと思っています。
もしかしたら sql という枠組みで話す質問ではないのかもしれません。
sql は初心者なので、動的テーブル名などを調べたのですが何か違う気がしました。
sql は歴史もあるし、自分の考えている程度のことはすでに枠組みができているのかと思い質問しました。
sql の枠組みですんなり当てはまるものがないとわかっただけで前進です。
ありがとうございました。 DBの世界でデータをストアすると言いますが、
では読み出す場合は何て言うのでしょうか? >>9
1つのファイルにこだわりすぎていたかもしれません。
DB を分ける案を検討しようと思います。
ありがとうございました。 >>12
5にも礼を言っとけ。
全く同じこと先に言ってる >>13
そういう意味だったんですね
>>5
ありがとうございました。 一旦作ったテーブルを長期間使うのではなく、一日にテーブルのcreateやdropを何十回も繰り返すような使い方は特に問題有りませんか? 取得した順番に数値をインクリメントして表示したいのですが、どういった文法をすればいいですか?
シーケンスとかそういうことではなく、
select
user,num
from
user
みたいなsqlで
userA 1
userB 2
userC 3
のようにnumに取得した順番に数値をインクリメントしたいです。 set @i:=0;
select @i:=@i+1 as rownum,user_id from user;
こういう書き方で自己解決しました。 mysql 5.6.20 です
daily_tblからcode毎の最新入力日付を得るのに
select a.code,code_name ,max(input_date) as saishin
from daily_tbl a
inner join master b
on a.code = b.code
group by code
order by code;
で出せたんですが、
今度はその日付が指定の日付でないもののみを出そうとして
select a.code,code_name ,max(input_date) as saishin
from daily_tbl a
inner join master b
on a.code = b.code
where max(inout_date) != '2016-08-05'
group by code
order by code;
とすると、Invalid use of group function ってエラーで出来ません。コード毎の最新入力日付が指定の日付でないもののみを
出すようにするにはどうすればいいのでしょうか inputなのかinputなのか気になるが、、、
having by 使うケースかなこれ? おっとgroup by の文字省いた時にby残しちゃったhaving ね select a.code,code_name ,max(input_date) as saishin
from daily_tbl a
inner join master b
on a.code = b.code
group by code
having max(input_date) != '2016-08-05'
order by code;
で出てきました。実際に使う時に全然havingなんて思いつきもしなかったです^^; >>25
テーブル修飾があったり、なかったりしているところがちょっと気持ち悪い。 この場合、codeについては付けないと ambiguous 曖昧と言って怒られてしまうんですが、全部にどちらのテーブルのものなのか
はっきりさせておけってことですか? この例の場合、同じカラムがあるなら、FROM句の最初にあるテーブルのテーブル別名aで修飾するのが一般的。
他人がこのSQLだけを見たとき、この書き方だとどちらのテーブルのカラムか分からない。 mysql5.7を使用しています
ユーザーのゲーム内マネーをwalletテーブルで管理していて
新たにユーザーの最大マネー記録の管理が必要になったので
recordテーブルを新たに作ることにしました
walletテーブル: id, user_id, gold
recordテーブル: id, user_id, max_gold
質問なのですが、walletテーブルのgoldから
recordテーブルのmax_goldを全ユーザー分一括で更新するにはどうしたらいいでしょうか
よろしくお願いします recordには全idすでにある前提?
UPDATE record
SET max_gold = (SELECT MAX(gold) FROM wallet
WHERE record.user_id = wallet.user_id);
とかは? >>33
レスありがとうございます
説明が不足していてすみません
userテーブルとwalletテーブルは1対1になっています
userテーブルとrecordテーブルも1対1です
全user分のwalletとrecordが存在します
walletテーブルのgoldは増減します
recordテーブルのmax_goldは過去最高goldです
あるタイミングで複数walletに一斉にgoldがプラスされます
そのときにwalletのgoldがrecordのmax_goldより大きければmax_goldを更新したいです
自分なりに調べてupdateとjoinを使うのだろうということはわかりましたがSQLを書けずにいます
教えていただけると嬉しいです
よろしくお願いします >>34
まずはひとつずつ考えて。
段階的に考えていかないと。 あー元がmaxより小さいケースがあんのか、でもl条件一つ追加するだけだよな 自己解決できたみたいです
update record
left join wallet on record.user_id = wallet.user_id
set record.max_gold = if(wallet.gold > record.max_gold, wallet.gold, record.max_gold)
where record.user_id = wallet.user_id;
これでやりたいことはできたと思います
ありがとうございました ちょっと見ただけですけど
recordテーブルを追加するのではなく、
walletテーブルに max_goldという項目を追加すれば良いのでは? user_idごとに1件しか無いのにidが別にあることとかいろいろ気になるけど
まあなんか書いてない理由があるんだろう、、、
どうしても最新状態保つなら単にトリガ書くだけのが早そうだが >>38
正直に言ってくそSQLだわ。
他人があとでみたら、こいつ殺すと思われるレベル。 初心者スレなんだからぼろくそに言うのではなく改善案を提示しないと これは更新が1回でも失敗したらもう最大値が出せなくなるじゃん >>34
walletに時系列データはないのか?
ないと実現出来ないのではないか? だめなSQLのようですね
どこが悪いのかがわからないのでどう改善していいのかもわかりません
具体的に指摘してもらえると助かります
SQL難しいですね
>>39
recordにはユーザーの最大ゴールド以外にもいろいろな記録を持たせようと思っています
>>44
時系列データはありません 開始の残高ファイルと更新データがあれば累計関数使って累計残高viewを作ってその最大値で更新したほうがいいと思う
mysqlでは下記リンク先参照
http://pct.unifas.net/mysql/3712 >>45
疑問なのは、UPDATE文ひとつでやらないと本当にいけないの?
こういう状況がわからない。 >>38のSQLでは、実行時のwalletの値が最大値だったときしか更新されないぞ
履歴保持してないのに全ユーザ一括は無理(全ユーザのwallet更新タイミングが同じでない限り)
walletが時系列や履歴を持たずに、現在値しか保持してないなら
walletの更新時にrecordを更新しないとダメ
で、普通のDBMSなら、こういうのはwalletにトリガ張ってやる
walletを更新するストアドプロシジャ作ってそれでチェックするって方法もあるけど >>47
どういうサイトなのかを説明すべきでしたすみません
ざっくり言うと競馬のようなサイトをやっています
レース終了後に払い戻しとして的中した全ユーザーのwalletのgoldを
ユーザーが賭けた額×オッズ分プラスします
この払い戻しのタイミングでmax_goldを更新したいと思い>>38のようなSQLを考えました
goldが増えるタイミングは払い戻し時のみです
>>48
トリガ、ストアドプロシジャを初めて知りました
調べてみようと思います。ありがとうございます どっちにしてもストアドもトリガも知らないくらいの初心者がDB設計して使い物になるとは思えない
SQL以前にDB設計じゃねえの >>51
> どっちにしてもストアドもトリガも知らないくらいの初心者がDB設計して使い物になるとは思えない
と思ってるような奴の方が使い物になるとは思えんな データベースの勉強をおろそかにしてORMに頼ってたツケが回って来た感があります
データベースについて基本からしっかり勉強し直したいのですが
おすすめの本やサイトを教えていただけないでしょうか >>53
amazonでデータベースで検索し、設計関連の評判の良いものを5冊買え SQLっていうか、DBそのものに関する質問になってしまうんですが。。。
データベースに同じUserID、同じパスワードで複数ログイン出来るってのは一旦資格を与えられたユーザーに
ついてはその権限の範囲なら信用するってことなんですかね。 1ユーザ1コネクションの制限を設けたとしたら、マルチプロセスやマルチスレッドなクライアントが任意のタイミングでコネクションを生成するのに苦労するよ。 そちらの方のプログラミングには疎いんですが、とにかくそういう制限があるとまずいってわけなんですね。^^;
例えば一般ユーザーに開放しているデータベースがあるとして、そこにアクセスするユーザーにいちいちidとパスワード、権限を
与えるのも大変だなとは思ったんですが。 >>57
RDBMSでもOSでも1ユーザー、1セッションというものの方が珍しい。 まあRDBMSによって「ユーザー」というものの定義は異なるけどな ユーザ用(id,パスワード)のテーブルがあった方がいいと思うけど >>57
>例えば一般ユーザーに開放しているデータベースがあるとして、
>そこにアクセスするユーザーにいちいちidとパスワード、権限を
>与えるのも大変だなとは思ったんですが。
一般ユーザーに直接データベースを操作させることは普通しないと思う。
そうではなく、データベースを利用するシステムが、利用ユーザーに提供する
業務用アカウントの話じゃないのかな? ユーザ用って書き方がおかしかった
ユーザを管理するテーブル 最初にテーブルを作成したら、新しいテーブルは必要ないシステムを作っています
この場合、テーブル構造をどう保存するのが正しいやり方ですか?
とりあえずcreate文を保存しています DBのツールでスキーマ保存すると結局CREATE文だけってのもあるしな 例えば名簿のtableがあって、
id name address
という三つのカラムがあります。
idは重複しない番号です。
この時 id で order by して、
idが1000番台の人の最初の100人取り出す。
idが2000番台の人の最初の100人取り出す。
みたいな処理を連続で行う場合、毎回 order by するのは効率悪いと思うのですが、
何か良い方法はありますか?
MySQLです。 >>72
> みたいな処理を連続で行う場合、毎回 order by するのは効率悪いと思うのですが、
indexが使われるなら効率は悪くない >>73>>74
すみません、初心者なのでもう少しヒント下さい。
よく理解できません。 >>75
select * from 名簿 where id >= 1000 order by id limit 100;
とかするんだろうけど、idにindexが付けられてるなら効率は悪くない
これでわからないのならお手上げ 処理が必ず1000番台ごとにするなら
もう一つ項目daiを追加して、indexを張っておき
id 1000〜1999 には 1 をセット
id 2000〜2999 には 2 をセット
id 3000〜3999 には 3 をセット
というのは?
select * from 名簿 where dai=1 order by id limit 100; >>75
select *
from 名簿
where
id between 1 and 100 or
id between 1000 and 1100 or
id between 2000 and 2100 >>78
そんなのDBMSとオプティマイザの判断次第
カーディナリが十分高ければ、daiのインデックスは使われる可能性が高いだろ
元質問はMySQL指定か。MySQLのオプティマイザでは絶対使わんっていう話なら知らん >>78
idに抜け番がないとはどこにも書いてないけどな そういや、mysqlではsub queryが劇遅だってのは直ったの? >>80
daiのカーディナリティも十分に大きければそのインデックスも使われるだろうけど、
常にそれよりカーディナリティが大きいidのインデックスを使った方がいいに決まってる。
それにそもそもidでソートするわけだし。 SELECT * FROM table
WHERE ...
AND ...
AND ...
AND ...
のようにAND条件をズラズラ並べる場合、
その条件を並べる順番で処理速度は変わりますか? 長文失礼します。
mysqlで
article_infoテーブルに title(記事タイトル),url(記事のurl)を持っています。
blog_infoテーブルには blog_title(ブログのタイトル),blog_url(ブログのtopのurl)を持っています。
やりたいこと:
article_infoで取得した記事のブログのタイトルを一緒に取得したい。
article_info.url は、,blog_urlのレコードのどれかを含んでいます。
例:
blog_title:サンプルブログ
blog_url:http://sample.com/
article_info.url:http://sample.com/article/001
のようになっているので、もし取得したurlがblog_urlに含んでいた場合、対応するblog_titleを共に表示したいと考えています。 ちなみに
SUBSTRING(url,1,LOCATE('/',url,8)) でblog_urlのどれかとマッチするurlが作れることがわかりました。 >>89
普通は検索方法はオプティマイザが判断するから関係ない
定義順に条件書かれてないと複合インデックスが使用できないDBMSがあるとかいう噂は昔聞いたことある
その場合は複合インデックスの定義順に並べるほうが早い可能性が高い
オプティマイザが貧弱で検索順を入れ替えられないDBMSも聞いたことがある
その場合はカーディナルの高い順に検索条件並べろと教えられたことはある
単一テーブルの単純な検索なら、最悪でもそのテーブルのフルスキャン1回ですむから
まあどうでもいいと思うが すみません。下記のかんたんなsqlで取得できました。お騒がせしました。
select
a.title,
a.url,
b.blog_title
from
article_info a,blog_info b >>92
詳しい説明ありがとうございました。
MySQLです。
念のために順番を考慮してAND条件を書いてみます。 >>93
fromでカンマで繋げるのは
INNER JOINの省略形な ふつう直積(CROSS JOIN)だと思うんだが、>>93読んであれ?と思った。
MySQLってそうなのか? すいません、できたと思ってたけどできてませんでした。
しょうがないのでarticle_infoとblog_infoにblog_idカラムを追加して
Inner join で持ってきました。 教えて下さい。
インサートしたカラムに不要な文字[:]がついてしまったのですが、
replaceで毎回取り除いてるとクエリが遅くなるので、すべて更新したいのですが、
update文で出来ますか? mysqlで質問です。
ng_wordテーブルがあります。
テーブルには、wordカラムにキーワードが登録されています。
main_textテーブルのtextカラムの中には
テキストの文章が入っています。
もしmain_textの中にng_wordのwordが含まれていたら、取得したくないのですが、
ロジックを挟まず、sqlだけで取得できますか? WHERE main_text NOT LIKE '%word%' じゃだめだったか? >>103
ワードが1つならそれでも良いかもしれませんが、
複数あるので… このスレ、SQL文書こうとするとエラーになる
どうしたもんかな・・・ Sorry, you have been blocked
You are unable to access 2ch.net
There are several actions that could trigger this block including submitting
a certain word or phrase, a SQL command or malformed data.
SQL文を投稿しようとすると、ハッキング行為とみなされるみたい >>106
まあSQLインジェクション対策なんだろうけどな。 >>107
前の書き込みをよく見ていないけど、テーブルの結合条件もなければ、カラムのテーブル名修飾もなくてわからない。
テーブル間の関係を説明してくれ。
そもそも初めに書いたようにSQLの書き方そのものが悪い。 >>102 に書いてあるだろうに、何が分からないのか分からない 兄弟関係の抽出 と LIMIT、OFFSETに代わるもの (マルチ)
OS: Windows 10 Pro
Access Version: 2016 (2010も使用)
VBA:Excel,Powerpointのみ
VBAでの回答:否
検索キーワード:access SQL 件数 指定
http://www.accessclub.jp/bbs2/0051/beginter16860.html
「No16860.SQLで件数を指定する方法」
と
SELECT [電話番号] FROM [T_児童マスタ] GROUP BY [電話番号] HAVING Count(*)>1
上記2つ等を元に、次のテーブルに適応させようとしていますが、
スマートな文、クエリ(または他の手法)が思いつきません。
どうかアドバイスをお願いいたします。
T_児童マスタ
学級 氏名 電話番号
11 A 1111-11-1111
21 B 2222-22-2222
31 C 1111-11-1111
41 D 2222-22-2222
51 E 1111-11-1111
61 F 3333-33-3333
↓
望む出力結果
学級 氏名 電話番号 兄弟学級1 兄弟氏名1 兄弟学級2 兄弟氏名2 兄弟学級3 兄弟氏名3
11 A 1111-11-1111 31 C 51 E
21 B 2222-22-2222 41 E
31 C 1111-11-1111 11 A 51 E
41 D 2222-22-2222 21 B
51 E 1111-11-1111 11 A 31 C
61 F 3333-33-3333 >>102
直積で結合して、textとwordを引数にとる文字列検索関数があれば、それをWHERE句の絞り込み条件にすればできるな。 >>112
兄弟の数は可変なの?
2固定なら普通にjoinすればいい >>112
こんな感じでいいと思う
SELECT
MM.学級
,MM.氏名
,MM.電話番号
,S1.学級 AS 兄弟学級1
,S1.名前 AS 兄弟氏名1
,S2.学級 AS 兄弟学級2
,S2.名前 AS 兄弟氏名2
,S3.学級 AS 兄弟学級3,
S3.名前 AS 兄弟氏名3
FROM T_児童マスタ AS MM
LEFT JOIN T_児童マスタ AS S1
on S1.電話番号 = MM.電話番号
and S1.学級 <> MM.学級
LEFT JOIN T_児童マスタ AS S2
on S2.電話番号 = MM.電話番号
and S2.学級 <> MM.学級
and S2.学級 <> S1.学級
LEFT JOIN T_児童マスタ AS S3
on S3.電話番号 = MM.電話番号
and S3.学級 <> MM.学級
and S3.学級 <> S1.学級
and S3.学級 <> S2.学級
WHERE nz(S1.学級,999) <= nz(S2.学級,999)
and nz(S2.学級,999) <= nz(S3.学級,999) >>117
ありがとうございます。
これから試してみます。 >>117
少し拡張してみたところ「演算子がありません」とのエラーが
出てしまいます。かなり初歩的な質問になってしまいますが、
問題点をお教えください。宜しくお願いします。
SELECT MM.ID, MM.入学年度, MM.学年, MM.[クラス], MM.[クラス内番号],
MM.姓, MM.名, MM.[せい], MM.[めい],
MM.性別, MM.生年月日, MM.電話番号,
MM.市区町村, MM.町域,MM.番地, MM.号, MM.建物名, MM.郵便番号,
MM.地区・常会, MM.下校コース,
MM.父名, MM.父連絡先, MM.父連絡先電話番号,
MM.母名, MM.母連絡先, MM.母連絡先電話番号,
MM.緊急連絡先1, MM.緊急連絡先2, MM.緊急連絡先3,
S1.学年 AS 在学兄弟姉妹クラス1, S1.名 AS 在学兄弟姉妹名1,
S2.学年 AS 在学兄弟姉妹クラス2, S2.名 AS 在学兄弟姉妹名2,
S3.学年 AS 在学兄弟姉妹クラス3, S3.名 AS 在学兄弟姉妹名3,
MM.PTA役員, MM.備考, MM.除籍
FROM T_児童マスタ AS MM
LEFT JOIN T_児童マスタ AS S1
ON S1.電話番号 = MM.電話番号 ←ここ
AND S1.学年 <> MM.学年 ←ここ
LEFT JOIN T_児童マスタ AS S2
ON S2.電話番号 = MM.電話番号
AND S2.学年 <> MM.学年
AND S2.学年 <> S1.学年
LEFT JOIN T_児童マスタ AS S3
ON S3.電話番号 = MM.電話番号
AND S3.学年 <> MM.学年
AND S3.学年 <> S1.学年
AND S3.学年 <> S2.学年
; >>112 >>117 >>120
こんな感じにしてみましたが、
今度は「JOIN式はサポートされていません。」
と出てしまいます。
SELECT MM.ID, MM.入学年度, MM.学年, MM.[クラス], MM.[クラス内番号],
MM.姓, MM.名, MM.[せい], MM.[めい],
MM.性別, MM.生年月日, MM.電話番号,
MM.市区町村, MM.町域,MM.番地, MM.号, MM.建物名, MM.郵便番号,
MM.地区・常会, MM.下校コース,
MM.父名, MM.父連絡先, MM.父連絡先電話番号,
MM.母名, MM.母連絡先, MM.母連絡先電話番号,
MM.緊急連絡先1, MM.緊急連絡先2, MM.緊急連絡先3,
S1.学年 AS 在学兄弟姉妹クラス1, S1.名 AS 在学兄弟姉妹名1,
S2.学年 AS 在学兄弟姉妹クラス2, S2.名 AS 在学兄弟姉妹名2,
S3.学年 AS 在学兄弟姉妹クラス3, S3.名 AS 在学兄弟姉妹名3,
MM.PTA役員, MM.備考, MM.除籍
FROM
(
(
T_児童マスタ AS MM
LEFT JOIN T_児童マスタ AS S1
ON S1.電話番号 = MM.電話番号
AND S1.学年 <> MM.学年
)
LEFT JOIN T_児童マスタ AS S2
ON S2.電話番号 = MM.電話番号
AND S2.学年 <> MM.学年
AND S2.学年 <> S1.学年
)
LEFT JOIN T_児童マスタ AS S3
ON S3.電話番号 = MM.電話番号
AND S3.学年 <> MM.学年
AND S3.学年 <> S1.学年
AND S3.学年 <> S2.学年
; >>121
accessでは一つのクエリではできないみたい
サブクエリ作って3段重ねで繋げてみて 重複行を見付けたら一行のみ残して他を削除したいのですが、
列名などを指定せずに、
DeleteDuplicateRow テーブル名
みたいなコマンドは無いのでしょうか?
キーは有りません。 その残す1行の指定はどうやって決まる?
基本的にSELECTできるものは消せる >>124
重複しているので、どれを消しても良いと思うのですが。 重複って言うのは、特定のフィールドだけじゃなく
(プライマリーキー以外)全てのフィールドが同じ値になるレコード
って意味で良いのかな? >>126
そうです。
プライマリキーも設定していません。 >>127
a
a
a
これを一行残して消すとか無理だろ >>128
sqlserver ならrownumber関数使えばできる >131
とりあえずMySQLです。SQL SERVERでもやりたいです。 >>132
やはり他の同じ値になるレコードと区別するために
一意のカラムをつけないと削除は無理だと思います
あるいは、>>129さんのやり方でテーブル全体を作り直すのが簡単 一意になるフィールドがあれば(例えばプライマリキーがあれば)、
プライマリキー以外のフィールドでグループ化し、
その上で、一番小さなプライマリキー値のリストを取得、
そのキーリスト以外の全レコードを削除、って感じでできます。 RDBMSで全く同じレコードは扱うの大変だし意味ないので今後のためにキー追加するか
重複したものは登録できないようにしたほうが良さげ 皆さん、いろいろアドバイスありがとうございました。
134さんの方式を試してみます。
重複する行を除去するような操作は普通はやらないのですか? だからその重複させるような事態そのものを発生させないようにしてるんだってば 重複データ消すのに、rownumber 関数が使えればorder byが使えるので、金額が大きいのとか最新のを残すとかできて便利なんだよな
http:/sotoattanito.hatenablog.com/entry/2015/10/20/230208 >>121 >>122
かなり長文になりましたが、うまくいきました。
ありがとうございました。 >>140
質問だけなら長文にならないだろ
後付けの条件あるからだろ 以前見たDBのER図でずっと気になってるのがあるんだが
複合主キーでテーブル繋げていくやり方って普通なんかな
例えば
「個人」テーブルでは「氏名・電話番号・性別・年齢」を主キー →
繋がる「生徒」テーブルで「生徒番号」が追加 →
「塾」テーブルでは「塾番号」が追加 →
「教室」テーブルでは「教室番号」が追加
DB連携の案件(基幹系のDBに、WebとDBが一緒になった鯖からでリンクドサーバで合体)で、その教室テーブルの先に
「塾生がどこの塾で試験申し込んだか」を突っ込むテーブルこさえてどうこうするって奴だったんだが
みたいなのとでもいうか、SQLで書くと
select *
from school inner join
(select *
from person inner join student on
person.name = student.name and person.tel = student.tel and
person.gender = student.gender and person.age = student.age) as selected_student on
selected_student.name = school.name and selected_student.tel = school.tel ... ;ごめんもう無理
みたいな奴
細部があってるかどうかは覚えてないが、だいたいそういうSQLでないと仕様がない
ER図だったから泣きながらやった
書籍を見るととりあえずID振って縛りたいのにユニーク制約らしいんだが
実際だと複合主キー使っていくんだろうか?
正直DBの設計よくわかってない下請けのアホなんで、NE〇の方が正しいのかなあ、などと疑問が 正確にはプログラマーですらない事務員 orz なんか釈然としないんだが、そういうものなのかなあ、と >>142
>「個人」テーブルでは「氏名・電話番号・性別・年齢」を主キー
そもそもこれが普通じゃない
> 正直DBの設計よくわかってない
本買って読め 個人で主キーに年齢含むのは普通ないとは思うが
複合キーそのものは別に珍しい物でもない
まあ、ミドル層の都合で全部にID振ろうとか言う流れも無いわけではないけどな 年齢は毎年変わるだろう
キーにしたいなら、生年月日の方 >>146
17からインクリメントしない声優なら知っている 人によって異なる解釈を受けるような定義名は避けた方がいい qiitaって無能のくせにタイトルで煽って
一読すれば書き手が思い込みの激しい初心者だってわかるんだけど
多数からコメントで間違い指摘されるとクソリプがwwwwwwwと煽ったり
せやから違う場合もあるって最後に書いてるやろ日本語読めんのかバカチョンwww
みたいな臭い奴が結構混じってるけどアレなんのためにやってんの?
誤解を招くタイトルでgoogle上位になるとqiitaから金もらえるの? お邪魔いたします。
ManegementStudioでストアドプロシージャをかけるようになりたいのですが、
家庭教師をしてくださる方いらっしゃいませんでしょうか?
お礼はご相談にて。
捨てアドをさらしますので、ボランティア精神にあふれる方お待ちしております。
rirarira_01@yahoo.co.jp >>154
お礼をするというのにボランティアとはどういうことなのか? >>154
Transact-SQLの本ならあるだろ。
昔からそんなに変わってない。
Management Studioがどうこうというはどういう意味? >>155
すみません、言葉足らずでした。
お礼はするんですが、なかなかお忙しい皆様が多いかと思いますので、
不勉強な私に時間を割いてくださるボランティア精神にあふれる方を
募集しておりました。
>>156
ありがとうございます。
早速購入してみます。
一次面接を合格した企業様がManegementStudioを使用しており
(SQLserber2014)ManegementStudioを使用して、
ストアドプロシージャをかけるようになりたいので、
ManegementStudioの操作性、ストアドプロシージャの知識、
両方が必要となる感じでございます。
現在ManegementStudio勉強環境にインストールして少しずつ勉強中ですが、
二次面接まで時間がないもので、どなたかに家庭教師していただけないかと思い、
失礼ながら書き込ませていただきました。
二次面接は来週早々なので、本が届くのが先か面接が先かという風になってし舞うかと思いまし手…。
どなたかお引き受けいただけませんでしょうか? 綴りの間違いは恥ずかしいから直して
企業様wもそういうのチェックするよ >>157
論理構成に難があるようだけど
二次は慎重にね。 >>161
こんな簡単な間違いもくみ取れないバカは黙ってろw その環境での開発経験が必須スキルって面接なら不合格になるべき状況だし、
そうじゃないなら環境作ることができて、足し算するだけのストアドつくれりゃあとはどうとでもなると思うよ。 >>160様
ありがとうございます。
ありのままのスキルをお話ししてきました。
>>163様
ありがとうございます。
ストアドはできれば尚可の条件なので必須ではないのですが、
出来てくれると嬉しいな、ということでしたので勉強しておりますが、
環境作るところまでしか進んでおりません。
本日結果が出るのでお世話になったお礼に結果はご報告させていただきます。 サブクエリを使う場合、サブクエリも範囲を絞ることで結果扱うデータ量が減って計算時間が短くなりますが、コードの可読性が悪くなります。
なにか良いアイデアはありませんか? サブクエリエオ使ったぐらいで「コードの可読性が悪くなります。」なんてウスラバカはそしたらここに書き込む低能 いっそプロシージャーにして見えなくしてしまったら? よろしければ教えていただければと思います
変数名に使われるstrsplって何の略でしょうか?
どうにも気になってしまって string split かねぇ
ggrと strsql を案内されるな ちょっと教えて欲しいんですけど。
select * で出てくるものについて、 レコードは並び順は不定ってのは知ってるんですが、カラムの順ってのはどうなってるんですか?
create tableで定義した順?
mysqlで自分で作ったテーブルで見るとなんか定義した順みたいだけど。。。 まあこれは定義した順
でもまあそういうのが気になる状況では * あまり使わないかなあ >>176
ありがとです。自分で書いているのは * の時でも全部カラム名を書くようにはしているんですが。 select * で列リストが定義順でない実装は見たことがないけど
それってちゃんとSQL仕様として決まってるのか >>178
知らんけど決まってないと * 表記自体使えなくね?
insert もカラム指定なくても使えるし。
information_schema 見れば分かるのかな。 列リスト指定しないinsertは*とは書かないからなぁ
information_schemaで列の定義順がみれたしても、*の出力が定義順だという保証にはならないだろ
集合論として行の順番に意味がないなら、列の順番にも意味はないような気がするけど
列の順番はデータじゃなくて定義の一部だって言われたら意味があるような気もするが >>180
select * の順番は何かしら定義されていると思うよ。そうでないと何で select * と書くことが認められているのか分からない。
insert で列リストを省略した時も values に最初に書いた値がどの列に入るか分からなかったら、何で省略できるのさって話になる。
あと列リストは組とかタプルとかいうやつで集合じゃないでしょ。こっちは順序あるし同じ値が勝手に1つにまとめられたらチョー困る。 table1
code comment
----- -------------
A001 コメント1です
A002 コメント2です
A005 コメント5です
table2
name code1 code2 code3
----- ------ ------ ------
名前8 A003 A002 A007
名前3 A004 A003 A001
名前2 A008 A001 A005
があり、例えば特定のキーワード
keyword = '1です'
に comment が部分一致するような code を含む table2 の行を取り出したいのです。
この例では、
名前3
名前2
の行です。
事前にtable1でキーワードに一致するものを見付けてそれを含むtable2の列を探せば良いと思うのですが、
SQL初心者なのでとっかかりが分かりません。
どういう命令でやるべきなのかヒントを教えて下さい。 ヒントをってことなんだけど、table2からA001のコードを持つ行を取得することはできるんだろうか >>184
そのSQLを書いて頂けませんでしょうか? select t21.name
from table1 as t1
inner join table2 as t21 on t1.code = t21.code1
where t1.comment like '%1です%'
union
select t22.name
from table1 as t1
inner join table2 as t22 on t1.code = t22.code2
where t1.comment like '%1です%'
union
select
t23.name
from table1 as t1
inner join table2 as t23 on t1.code = t23.code3
where t1.comment like '%1です%'
多分↑で通るけど、もっといい模範解答求む select name from table2 t2,
(select code from table1 where comment like '%1です%') t1
where
t2.code1 = t1.code or t2.code2 = t1.code or t2.code3 = t1.code; >>191
さんの方法で出来ました。
>>188
さんの方法も試したのですが、うまく行きませんでした。
私のやり方が悪いのかもしれません。
皆さんありがとうございました。助かりました。 もう一つ教えて下さい。
>191さんの方式ですと出力が
name, code になりますが name のみにして distinct したいのですが
やり方が分かりません。
宜しくお願い致します。 >>193
その通りやってますか?
select文に指定している name しか表示しないはずですけど
先頭行に distinct 加えれば重複している name は消えます。
select distinct name from table2 t2, csvからphpmyadminでインポートしてるんだけど途中で止まってしまう
7000行くらいのデータが3000ちょいで切れて、その後継ぎ足しても10行程でまた切れる
あんまりsql関係ないけど原因わかる人いたら教えて
ちなみにxampp >>194
勘違いでした。
select * ...
としていました。
うまく行きました。
ちなみに>191のような
selectの中に(select ... )があるのは何ていう方式なのでしょうか?
ググルためのキーワードを教えて下さい。 えっ、データベースの板に来るくらいなら、いくらなんでもサブクエリという名前くらい知っとけよ >>197
ありがとうございました。
サブクエリ、初めて耳にしました。難しいです。
一時テーブル(#テーブル)と言うやつとは違うんですか? 一応ここは初心者スレって名前ついているし
ベテランから見たら知ってて当たり前と思う質問でも
優しく回答してやれよ >>195
php文字化けとかめんどくさいから
.Netとかでそういうのやってる 195だが
エラー行から改めて入れて、エラー行から改めて入れて
何回かやったら全部入ったわ
原因はわからん
なんやら文字コード的なエラーメッセージだった気がする DBに突っ込んだデータに対してちょっと込み入った操作をしたいとき、
例えば、「ORDER BY id ASC した状態で、前の行と比較して DATA の値が2以上離れてる行が3行以上続く」ケースを抜き出したいとき、
一般的に (個人的にでもいいです) どんなやり方が最も望ましいんでしょうか?
全行ガサッと取ってきてプログラム側でせこせこ判定していく以外思いつけなくて、これでいいのか不安です >>203
SQLや処理系ごとの拡張で頑張るとか
ストアドで処理するとか
それだけではどの方法が最善かはわからん >>203
実現できる方法でやる。
結果が問題なければ
そもそも何を不安に思う?
それは何故よ? 日本終了
ーーーーーーーーーーーーーーーーー
22日からの大雪で航空機が相次いで欠航となった北海道の新千歳空港で、24日夜、100人あまりの中国人が抗議し激しく詰め寄る騒ぎがあった。 >>203
window関数のlagを使った例
select
id
,data
from
(
select
id
,data
,data - lag(data, 1) over(order by id) as delta1
,lag(data, 1) over(order by id) - lag(data, 2) over(order by id) as delta2
from
tab1
)
where
abs(delta1) >= 2
and abs(delta2) >= 2
; select
id
,data
from
(
select
id
,data
,data - lag(data, 1) over(order by id) as delta1
,lag(data, 1) over(order by id) - lag(data, 2) over(order by id) as delta2
from
tab1
)
where
abs(delta1) >= 2
and abs(delta2) >= 2
; 教えて下さい。
カラムが
code,:index
name:名前
date_from:始めの日付 2017/1/1
date_to:終わりの日付 2017/1/3
days:差分 2
というレコードが1つあった場合に
2017/1/1 index 名前
2017/1/2 index 名前
2017/1/3 index 名前
という風に出力するSQL文を教えて下さい。
ちなみに postgresql です。 >days:差分 2
このカラムの意味が分からない 質問させていただきます。
2017-01-01 01:00:00
2017-01-02 01:00:00
2017-01-03 01:00:00
2017-01-04 01:00:00
といったdatetime型(Y-m-d H:i:s)のレコードdtimeを持つt1テーブルと
2017-01-02
2017-01-03
といったdate型(Y-m-d)のレコードdateを持つt2テーブルがあります。
t1テーブルのdtimeからt2テーブルのdateと日付(Y-m-d)部分が一致しないレコードを取り出すにはどのような記述をすれば良いでしょうか
この例の場合はdateにある2,3日のレコードを省いて1,4日のレコードのみを取り出したいです。 >>210
365行のテンポラリテーブルを用意してうんぬん >>212
標準SQLの範囲じゃないような気もするけど、
DateTime型からDateだけ取り出す関数があるだろうからそれを使う。 >>210
Select date_from + g.gs as 日付
, code1,name
From Test1 t
,(
select generate_series(0,10) as gs
) g
Where g.gs <= t.days;
でも>>211が言うようにdaysは演算で処理すべきだべ >>212
mysql と仮定して
select dtime from t1 where
date(dtime) not in (select date from t2); >>213,215
できました。ありがとうございました。
>>211
テーブル設計自体はすでにあったものでして… >>214
>>216
できました、ありがとうございました。
datetimeをdateに置き換える簡単な方法があったんですね。 phpmyadminでデータベースを作成しようと思ったのですがSQLタブのテキストエリアにコピペができません(右クリックしてもコピー、切り取り、貼り付けがでない)
コピペをするのに設定などがあるのでしょうか? MySQLの質問させてください
データ更新するとき、phpmyadminのインポートで更新するには、sqlのファイルはどのように書けばいいのでしょうか?
新規作成するときは、INSERT文でこんな風にしました
上書きするときの書き方があれば教えてください
INSERT INTO `sample_table` (`abc_id`, `efg_id`, `meta_key`, `meta_value`) VALUES
(202, 4002, '_thumbnail_id', '4001'),
(212, 4012, '_thumbnail_id', '4011'),
(222, 4022, '_thumbnail_id', '4021'); 外部結合クエリで
・A LEFT JOIN B
・B RIGHT JOIN A
これらは全く同じものではなく、結果が異なる場合があるので
外部結合は左のみ使うべしってどこかのサイトで見た記憶がある
どなたかそのカラクリを知っていたら教えて >>221
俺の中ではそんな事ないから答えられない >>220
insertでするなら on duplicate key update
又は replaceでというのも
それぞれについて説明をちゃんと読んでから使ってね >>225
ありがとうございます!
確認して使ってみます ユーザー登録ありのシステムを組むにあたってユーザーが2種類いる場合
テーブルは分けるべきでしょうか?
例えば、Amazon マーケットプレイスのような
販売ユーザーと購入ユーザーの2種類のユーザーが存在する
このような場合のテーブル設計についてご教示いただけると有り難いです。
スレ違いでしたらすいません。 >>231
スレ違いでしたねすいません
スレを教えていただきありがとうございます。 何もしていない普通の一般人の自宅に隠しカメラを取り付け
それをネットでリアルタイム配信
仲間という人間に対する盗聴盗撮生ネット配信の会
しかけたカメラの映像
乗っ取っているPCの画像をリアルタイムで生配信中
集団で仲間の私生活を覗いて楽しんでいる
そんなことが今この国では行われています
仄めかしの隠語は
猫 穴 水 仲間 selectで取得するカラムにAUTO_INCREMENTを指定する方法はありませんか >>236
取得したレコードに連番を付けたいなら方法はある
もしそうなら、これ以降は自分が使っているデータベーススレに移動しろ >>237
どのDBでも大差ないだろ・・・
と思って実験したらmysqlとoracleとpostgresとsqliteで全部やり方違うのな
ちょっと面白かった >>238
フェッチした順に普通は1から振られる。 質問させて頂きます
社員IDひとつに対して10行の権限管理レコードが必要です
これを500人分ひとつのテーブルに追加します
レコード例
社員ID, 画面ID, 閲覧, 編集, 削除, …
00000, W001, true, false, false, …
00000, W002, true, true, true, …
…
00000, W010, false, false, false, …
権限管理10行のテンプレと追加したい社員IDのリストはあります
SQL Management StudioかAccessを用いて作業したいのですが、この道具をどのように活かしてクエリを書けばいいのか思い浮かばなかったので質問させて頂きました
アドバイスよろしくお願いします >>242
絞り込み条件が社員IDと画面IDなんだろ?
何がやりたいのか書いてくれ。 >>242
手作業多めでいいなら
1 適当なエディタでカンマをタブに変換
2 excelを開いてシート全体を文字列に設定
3 1をシートに貼り付け
4 テーブルとおなじ列に加工
5 accessのテーブルに貼り付け
まあinsert文に加工して実行でもいいかもね >>244
どう読んだらCSVファイルの取り込みと解釈できるのか? >>243-245
レスありがとうございます
今回は>>244さんのアドバイスを元に
社員IDと画面IDのテンプレを二重ループで合体させてテキストに出力した5000行を
テキストエディタとExcelで整形してAccessに貼り付けて追加しました 言語の設定ってインストールするときに指定する仕様なんですか?
何も指定しないと勝手にユニコードになると思っていたのですが >>248
自分が使っているデータベーススレに移動して、疑問に思っていることをもっと具体的に聞け >>249
移動します
SQLServer2012なんだけど
俺もよくわかってない >>242
insert ... select ... from 権限管理10行のテンプレ (innnerとかcrossとか)join 追加したい社員IDのリスト
で行けるんじゃないのか
もうエクセル整形でやったのならそれでいいけど 何をやろうとしているかは大体想像できるんだが、
こういう仕組みを実装する時って、
個人単位で権限を操作するのかな?
新しい機能が追加される度に、全てのユーザーに
権限の可否を設定しないといけなくならないか? >>251
自分も「これは直積(cross join)でやるかな」と思ったんだけど
直積って実用上はあんまり出てこないんだよな
(SQLの考え方としてはとても重要だと思うのだけど)
それを初心者スレで勧めていいものかと躊躇ってしまった 244書いたの俺だけどリストって書いてあったから
深く考えずにテキストファイルかなんかだと思ったわ
騒がせてすまんね >>242
要件にもよるかも知らんが事前に全部追加せんでいい方向もある。
ユーザーテーブルとの乖離にどう対処するか面倒だし。
ユーザーテーブルがなかったら、うん、まぁ、うん。 超初心者です。
ユーザーごとに掲示板を作る場合
例えば
boardsというテーブルを作って、すべての掲示板の書き込みをそこで管理するのがいいのか、
それともユーザーごとに001boardsみたいにテーブルを作って管理するのがいいのでしょうか?
一元管理の場合、書き込み数が多くなった場合に処理が遅くなるなどの、問題点はないでしょうか?
アドバイスをよろしくおねがいします<(_ _)> >>257
ユーザーごとにテーブルを作るのは管理がたいへんだろ。性能の問題はかなりのデータ量でないかぎりは問題ないと思っていい。 >>258
一元管理で設計してみたいと思います。
アドバイスありがとうございました。 >>260
ユーザーごとだとして、
例えばテーブル(ユーザー)数が1万を超えても問題ないでしょうか?
この場合レンタルサーバーなのでsqlite3を使うことになると思います
(Mysqlはテーブル数の制限がある) レンタルサーバーでサイトを作るだけです
そこでユーザー登録をして、ユーザーごとに専用の掲示板を建てるイメージです その程度なら一つのテーブルで良いと思うけど
不具合あると、隣のユーザーの掲示板が覗けるとかあるかもね ユーザー退会したらデータどうすんの?
破棄するならテーブル別がらくじゃね
同一テーブルだと日次で深夜にでも削除実行するんか >>271
sqliteで複数ユーザーが
同一テーブルにアクセス、
まだわからないかなw >>261
> (Mysqlはテーブル数の制限がある)
どこ情報かしらないが、普通は制限はないよ
また、仮にsqlite3を使うとしたとき、重大な問題が別に発生する
それは、誰かが書き込みをするとファイルがロックするということ
要件的にそれで大丈夫かどうかは熟考する必要がある
逆にMySQLを使う場合でもユーザ単位でテーブルを分割する場合もある(ユーザIDによる水平分割)
ソシャゲ界隈では良くあること
これも、要件と相談してからだな あ、テーブル数の制限って、レンタルサーバだからなのか
なるほどねー まあこのまま続けてたら半年後にはなんでこんなバカな質問したんだろうと思うこと請け合い ユーザ数が1万人を超えるようなサービスを、MySQLのテーブル数が制限されるようなゴミレンサバで実行するなんて・・・
すごーい(別の意味で) 金取るシステムとは思えん
無料サービスだろ
エラーが発生してもデータが壊れても、すいませんテヘで済むような奴 会員数1万人のWebベースのサービスやりたいんだったら、SQLがどうのではなく、
それなりの通信環境、ハードウエア、システム要員を用意しないと駄目だろう そもそもこんなところで質問するようなやつなんだから
訳分からず質問してるだけだろ
察して遊んでやれよ >例えばテーブル(ユーザー)数が1万を超えても問題ないでしょうか?
要求仕様じゃないかな? テーブル名をフラグに使ったことならあるよ
テーブルがオープンできない=それは未使用
当時はみな気がくるっていた これからSQL勉強する者です
独学で本を参考にするつもりですが、まずSQLでデータベースから抽出できます、といえる程度になるにはどのくらいの期間見込めばいいでしょうか? いや真面目に・・3ヶ月くらいだろうか?ととりあえず予測を立てたのですが・・
実務でできないのが痛いところなのですが 何をインストールするのか知らんけど、つまずく奴はRDBを自分のPCにインストールするとこからつまずくからなw
あれこれやる前から考えてもしょーがない。自分でコマンドをどんどん入れてみるこったよw 君がPCを所有していて、OSが入っていて、ネットに接続できているなら
適当なSQLをダウンロードしてインストールすれば
勉強は今すぐにでも開始できそうなんだが >>290
あんたの才能とやる気次第としか言えない
SQLはかなり癖のある言語だから、ダメな人は1分で本を閉じて終わり >>291
MySQL
能書きいうよりまずやることは経験済み納得だが、今後の方向づけを検討しての質問だった >>294
そうなんですよ
いまうちmacしかも壊れた・・(へぼくてすまん)
つうことでうちは会社があまりダウンロードとかうるさくないのですが、
会社のwinマシンに落とすことを目論み中ですが、会社PCに個人で落としてる人いますか? それはここで聞かずに、上司に聞くべきことだろ
ちゃんと理由を説明して、何をインストールしたいか説明し
それが仕事で必要なことだとなればインストール可能じゃないのかな?
君の会社での役割が管理者で、PCの設定に関して権限があるなら、聞かなくてもいいだろうけど やはりこっそりはまずいか…
実務じゃ必要ないって言われるのが関の山だ
だってうちの上司ろくに関数もわからないお馬鹿…なんでもマッチョに力技が得意技なもんで
なくせに色々要求してくる
んでそんなとこを抜け出すためのSQL習得なのです
Winマシンを大人しく速攻買おう
つうことで安いの探すとこから始めます
Dellあたりかなー できたらVAIO けっこうまじめに質問したんだけどやっぱ2ちゃんだな
冷やかしだけで答えてはもらえないか
ま、いいやとっととやるから 真面目に回答しても冷やかしとしか受け取って貰えない w >>300
だいぶ抽象的で、何に役立つのか
分かりにくい質問だったことは
覚えておいて。 DB板は、おふざけな質問でない限りマトモに答えてくれるよ SQLでデータを抽出する基本だけなら、みんな言うように1日でできるぞ
select文流すだけだからな
問題は、SQLを発行する方法とそのための環境の構築が難しいだけで >>307
select hello from world 批判も応援する言葉もどちらもありがとう
290で3ヶ月と言ったのは、会社のちょっとデータ詳しいちょー意地悪なおっさん(でも非エンジニアで営業部のデータ取りまとめしてる程度)に
SQL独学で3ヶ月でてきて当たり前、オレは3ヶ月で覚えた、と言われて
もちろんそれはマウントしたいだけだからどの辺りまでかなんて言わないしこっちも聞かない
だから漠然とした答えに困るような素人くさい愚問なアホな質問とわかっていたんだけど、
とりあえずの導入としてはどのくらい見ればいいかな、と知りたくなってしまって
だから答えてくれた時間とかはその通りでもあるし、その限りでないこともわかってる
そのおっさんは独学で覚えたのが自慢で、でもそのおっさんがExcelで作ったものはちょっとした普通の作業が汚い
SEの人と一緒に働いたとき当たり前のことをちゃん綺麗に整えて作るからとても感心した
そんななんやかやがあり
スレ違いになり申し訳ない
Hello world 本日、postgresqlをDB2に替えたらwebアプリが動かなくなったわ。
もう逃げたい。俺のせいじゃないけど。 テストもせずにいきなり入れ替えたのかよ
そんなことができる現場、逆にすごい楽しそうだな SQL言語ってオラクルとかMysqlとか、MSで違うんですか? SQLとMySQLって違うの?
でSQLがあってのOracle? >>316
単語それぞれでググってみればわかる
MySQLとOracleはデータベースソフトウェア製品の名前
SQLはそれらで共通に使われている(ただし方言あり)言語の名前 誰が質問者か分からなくなってきた
質問者はsageをせずに書き込むと良いですよ
そうすれば、ID表示でますから SQL ServerとMySQLを単にSQLと略す馬鹿がいるので混乱する。 初めてダウンロード
PostegerSQLとMySQLどちらがいいだろうか? 両方入れとけ
管理方法が違うのでコンソールまたはツールで馴染んだほう残せばいい ツール使うなら、両者ともそれほど違いはなかったと思う
コンソールだと、違いがあるから慣れるまで時間掛かりそう >>324
おけ
両方入れる
>>325
んーよくわからず、まだ先のことだろうから後で考えるわ SQLを触ったことないんですが、クエリ文を覚えるためにはどうすればいいでしょうか?
C#という言語でLINQというものは触ったことあるのでまったくわからないとは思わないのですが・・・ >>328
普通の人は、本買って読むんだけど・・・ SQL試す環境つくればいいよ、上にあるMySQLやPostgreSQLをローカルに入れて
PgAdmin3とかMySQL Workbenchとか動かしてみては
SQLite3でも試せるけどね >>328
SQLとクエリと言ってる時点でおかしい。たぶんSQL Serverが前提なんだろうな。 >>334
質問の意図がわからない
それをここで俺らに聞いて何をしようというのだ? >>334
えっ!?!?
いやいや普通もれなく全員清掃係りの人も警備の人も使うでしょ
おたく使ってないの??? accessは帳票必要なシステムでは楽チンだけど
帳票なかったらphpのほうが楽チンだな >>328
業務で使うsqlのパターン は限られてるから
初心者向けの本を買えばいいと思うよ 業務で使わないsqlは多種多様なのか?違いが分からん DB自体の操作やユーザー管理も含めて言っているのじゃないかな? 業務で使う時は特殊な記述を避けるというだけの話かと 顧客id 顧客名
取引id 顧客id 取引額 取引日
こんな2つの顧客テーブルと取引テーブルがあるとします。
取引テーブルの取引日と顧客idはUNIQUEな関係です(同じ日の再度の取引はない)。
ある顧客との、ある期間中どれだけ取引があったか(回数と総額)の計算をしたいです。
顧客テーブル
顧客id INT PK
顧客名 VARCHAR NN
取引テーブル
取引id INT PK
顧客id INT FK
取引額 INT NN
取引日 DATE NN
UNIQUE (顧客id, 取引日)
インデックスを貼るべきところとかよくわからないのですが、テーブルはこんな感じでいいのでしょうか?
検索(WHERE)に取引日を使うので、取引日にもインデックス貼ったほうがいいのでしょうか?
あと取引日のDATE型なんですが、UNIXTIMEのようにある日からの起算のほうが検索早そうなのでINTにしたほうがいいですか? >取引日にもインデックス貼ったほうがいいのでしょうか?
それで検索をよくするんだったら良いんじゃないの。自分は株価テーブル作っててPKが(コード、出来高年月日)なんだけど、
出来高年月日での検索もするんでその出来高年月日にindex貼ったら実行スピードめちゃ上がったし >>345
DATE型使っても、内部表現はバイナリー値だから実行スピードは変わらないだろう >>346-347
レスありがとうございます。
実例での効果まであげていただいて感謝です。
DATA型でも検索速度は変わらないとのことなので、
このままでCREATEしたいと思います。 RDBMSの内部構造を意識するのが初心者なのかと。 まあプログラムやってればその辺はちょっとは検討つくでしょう
JavaScriptみたいのしかやったことないとかだとDBいじる機会もなかなかないだろうし
ところでDATE型とINT型の検索速度の比較って
ググって見るとINT型のほうが早いみたいだけど 郵便番号と地名が書いてるデータベースを作るとして
0から始まる北海道はとりあえず無視するとして
7桁のユニークな数字になるわけですが
そういう番号があっても主キーにせずオートインクリメントなサロゲートキーを作るべきですか? 郵便番号は郵便局が自分たちの業務をやりやすくするために振っただけのものであって
地名との一対一の紐付けを保証するものではないし
郵便局の都合で変更されることもある
そのへんを理解した上で使うなら別にいいんじゃない? 「郵便番号の」サロゲートだとしたらそのへんは何も変わらんが。 >>353
> ところでDATE型とINT型の検索速度の比較って
> ググって見るとINT型のほうが早いみたいだけど
そらそうよ。プログラムやってれば見当つくはず。
>>354
困ったことに、郵便番号と地名は1:nです データベースは当然、1:n関係を表現できるだろうに。何を困ることがある? 郵便番号はちょっと例えが悪かったかな・・・
例えばクレジットカードとか連番だと都合が悪いけど一意な番号
それでもサロゲートは必要? だってとりあえずauto incrementを主キーにしとけって書籍に書いてるんだもの 初心者にはあれこれいうよりベストな書き方覚えろっていう
ベストでもないオレオレ書き方教える書籍は多い
全部のテーブルにcreated updated作れみたいな >>353
そもそもどのRDBMSのINT型なのか知らないが、標準SQLではコンピュータの数値表現としているので、速いのはあたりまえ。
ちなみにOracleでは標準SQLのINT型はNUMBER型なのでまったく違う。当然Oracleでは計算が遅くはなる。 >>365
プログラミング言語の歴史では、小文字をメインに使うようになったのはC言語あたりから。 Oracleの場合、内部で大文字に変えていると聞いたことがある
本当かどうかは確かめたことないし、今もそうなのかは分からないが
使っていた当時は全部大文字で書いてたな DB側で用意してる関数含めてユーザ入力による変数になってる
テーブル名とかカラム名以外は全部大文字にしてる
`table` `long_table_name` `column` `long_column_name`
ご丁寧に``で囲んでるけどこれもいらんのよなあ
なんかいい規則があればいいんだけど 基本的に大文字しか使えない環境が当たり前の頃からSQLあるからな、、、
COBOLでの EXEC SQL 文とか懐かしいなあ >>368
それを言うのがいるけど、プログラマでそんなことを言ったら恥ずかしいぞ。大文字、小文字を区別しないなら大文字、小文字の判定処理が入るわけで、そこから大文字に変換する処理が遅くて問題になるなど阿呆みたいなこだわりだ。 大文字に変換する処理が遅くて問題になるなんて誰か言ってた? 大文字が大文字かどうかより、文字がなんなのかの判定も入るわけで、そんな処理時間はいつの時代のコンピュータの性能で考えているんだよw
こんなことを言い出したらRDBはあらゆることが遅すぎて使えない。現実にRDBはコンピュータの性能が上がったから使い物になるようになった歴史も知らないのか? 368本人です。何かお騒がせしてしまい済みません。
相当昔の話です。
動かしていたサーバーはW2k、CPUはP3、メモリー4G程度でした。
できるだけ負荷を減らせと言う指示の中で作業してました。 パーサーの仕様で大文字小文字区別しないにしても
大文字しかパースできなくて変換処理が必要だとしても
それに判定を挟む必要もなければ
ただの一文にすぎないSQLに処理時間なんてギャグかよって話 >>378
構文解析にかける時間に比べれば
文字列の処理なんて微々たるものがわからないような猿 >>377
判定処理はいるだろw
文字がAならAかどうか判定する。
何この低レベルw 小文字混ざってる前提で全て大文字にしてからパースすればいいだけってのは
プログラマーならわかるだろ 結局予約語だけ大文字で書けばいいの?
開発効率落ちまくるけどどの参考書もそうしてるよな コーディング規約ってのがそれぞれのチームなり部署なりにあるだろ?
それに従えば良いだろ。
んで自分一人のものだけなら好き勝手に そうなんだけどさ、大文字と小文字使い分けるのってすごい面倒なんだよなぁ
玄人の皆さんは使い分けなきゃいけない状況のときどうやって書いてるの?
毎回shift+capslockしてるの?てか列名日本語にするのほんとやめてください 使い捨ては全部小文字
あとで見返すことがあるものは予約後大文字、シフトに指置けばいいべ >>384
効率落ちまくるって、どんだけクエリ書いてるんだよ
300char/minだとして、大文字小文字意識しても5秒ほどしかかわらんだろ
つまり、1分の差がでるのに3600文字必要
毎日1万字書く奴がいたとしても、せいぜい3分/dayくらいの差だ >>388
お前はキーパンチャーかwどんだけキーボードマスターだよw 全部小文字でもいいだろ好きにしろ
ぱっと見てここSQLだなってわかるようにしたいなら大文字にすりゃいいし
動きゃいいんだよ >>381
大文字にするにあたって元の文字が大文字か小文字か判定する必要はないって話だと思うんだが、
あなたが言うように判定するのは無駄なので判定しないのが普通。 >>388
キーパンチャーなみのタイプ速度で、普通は考えられないような量のクエリを1日にタイプするとしても、
それでも1日あたりの作業低下量は3分程度なんだが、>>384はどんだけタイプしてんだよって話だ
読解力ない奴って、底が知れんわ そもそもSQL誕生して何十年も経ってるのにいまだにこの議論してんだから
大文字小文字の問題は根深いよな
>>392
タイピング速度の問題ではなくてストレス的な意味の開発効率を言ってると思うぞ>>384は >>393
この程度のコーディングルールでストレスとか、向いてないんじゃねーの? 安価ミスしちゃうそそっかしい人はフォーマッタ使えばいいんじゃないでしょうか。 >>393
> 大文字小文字の問題は根深いよな
根深いっつーか、どっち派もいるというだけでしょ
他言語だっていつまでたっても中括弧の書き方レベルの議論が終わらないし てか、別に大文字小文字で開発効率が落ちる奴がいても不思議じゃない。
不思議じゃないが、だから何ってはなしで。
俺らには関係ない。 スレチかも知れんがMac使ってるやつはSequel入れとけフリーでこんないいの
なかなかないぞ 大文字小文字もインデントの具合も全てどうでもいいと思ってるが・・・
カンマを行頭に置く奴だけは許せん!!! 俺もこの程度で効率落ちまくるなら、プログラマに向いてないと思うよ プログラマなら、たとえMISRA-C完全準拠を要求されても、淡々と従うものだ。 >>381
お前がw
このスレでw
一番低レベルだがなwww 俺は逆に面倒だと思う人のほうがプログラマには向いてるとおもうけどな
if so を考えるのって大事だと思うぞコーダーって意味なら向いてないと思うけど >>404
面倒だと思うのはかまわない
ただ、この程度で効率落ちまくるレベルの奴は、プログラマに向いてないってだけだ 「落ちまくる」のは向き不向きよりも不慣れなだけだろう
向き不向きの話をするなら、大文字で書くことに何の疑問も持たない人の方がプログラマに向いていない
理由があって大文字を選択してるなら良いことだと思うが >>406
キーワードを大文字で書けくらい、即慣れるだろ
ふつーのプログラマなら、効率が落ちまくったりしません >>386
> 毎回shift+capslockしてるの?
誰も答えないのでコメントしとくか。
普通はCapsLockなんか使わないでしょ。
Shift推しながらタイプするだけ。 予約語なんて一覧にして各RDBのドキュメントに乗ってんだから
ちょちょいとコピペして整形して正規表現で置き換えりゃいいだろ それでは気をとりなおしてwレベル高い正規表現どうぞw
↓ エディタに丸投げするだけなのに
本気で言ってるのかどうなのか・・・ >>391
何をわけのわからないことを言ってるのか?コンピュータからしたら大文字と小文字のアルファベットは別の文字だぞ。 初心者が数字列を数値だと言い張ってゆずらないのと同じなのかな?
こういうのは時間の無駄だから関わらない方がいいわ。 全くだな
話がわかってないID:cT/4yIz6 のようなキチガイは構ってはいけない いやいくら馬鹿だからってキチガイさすがには言いすぎだろw
さて与太話はこれくらいにして
そろそろ正規表現の話題の戻そうか ぶっちゃけどんなプログラミング言語習得するよりDB極めたほうが金になるよな
業界の中でもDBエンジニアを目指すのが一番おすすめだわ >>423
クエリだけ書けてもプログラムないと高度な事できないだろ。分析止まりでランニングできない。 >>425
逆にクエリが書けなればダイナミックなプログラムはかけないけどな >>426
だからどちらかじゃなくて両方必要って話だろ 改行考慮や大文字小文字無視するだけでも正規表現使う理由にはなる
正規表現と聞いて脊椎反射するやつはエディタで置換したことないやつ 凄く難しいこと言ってSO
だけど全体的には凄くアタマ悪SO
正規厨って大体SOUL 難しいように聞こえるならお前の頭が悪いのだろう
正規表現は一般的なテキスト処理にも使われるもので
プログラムの中だけで使われるものじゃない 突如何者かに向けて正規教室を始めた正規厨SO FOOL 正規表現知ってから、もう、文字数数えて
左から何文字目から何文字目でアレを見つけて
文字数数えて次のアレを見つけて文字数数えて
切り取って、みたいなことやらなくなったから
頭が鈍った気がするけど
便利でもう過去には戻れない。 だが正規表現にバグがあった時のことを考えると
怖くて本番業務には使えない 正規厨ってニートだったのかYO
正規ばかり弄ってないで働けYO え、てか正規表現できないプログラマとかいなくね?
忘れても調べればすぐでてくるし 正規表現ときいたら脊椎反射的に噛みついちゃう非正規おじさんをあんまイジメないでくれる? >>438
sqlにもバグがあるけど
どう扱うの? >>443
SQLにバグがあったらメーカーのテストですぐにわかるだろう
正規表現はどれだけテストされているか怪しいものだ SQLより正規表現のがテスト大変て本気で言ってるのか >>411-412当たりが話の元
ファイルにSQL書く時大文字タイプするのはどうするかって話 RDBMSのスレなのに正規化じゃなくて正規表現の話題になってるのが不思議w >>448
正規表現はそれ自体がわかりにくく、バグの温床。安易な正規表現の使用はよくない。 >>451
RDBでも正規表現を使う関数があるから的外れでもない。 そんな難し複雑な正規表現の話をしてるわけではないだろうに
正規表現ときいて脊椎反射しちゃう正規おじさんがいけないんだよ >>454
でもオマエ正規厨やROCK!
俺ってSOUL!
低能は馬鹿にするポリシーなんだYO! >>455
ごめんね正規じゃなかったね
非正規おじさんだったね
早く正規になれるといいね おじさんは正規表現得意なんじゃね?
秀丸にもあるんでしょ? 正規表現のテストは自信が持てないのに、SQLのテストは完璧に出来るという自信は何処から湧いて出るのか。
怖や怖や。 >>463
自身が持てないテストなんてテストじゃねえよw
何言っちゃってんの正規厨クンw >>463
どんな正規表現を言ってるんだよ?
よほど簡単なものしか想定してないのか。
正規表現はプロ中のプロでも間違うことがあるんだぞ?
だから複雑なものはあまり使われない。ぱっと見、これで合っているかどうかわからないのが原因。 んなことないだろ
だいたいposixかperlか2択 >>465
うえでワーワー言ってる人って、正規表現を書き間違えたことでのバグじゃなくて、仕様通りの動作をしないというバグのことを指しているとおもうよ 時と場所をわきまえずに正規自慢したがるのが正規厨なんだYO >>471
Oracleも正規表現の関数を大量に追加したものの使ってるプログラムを見たことない。
正規表現の乱用はよくないという結論は十数年前に出てるよな。
Eメールアドレスの形式チェックですら正規表現だけでやろうとすると難しくて昔はどのWebサイトもミスしまくってたな。 >>472
なんでも乱用は良くないものですよ
Eメールアドレスの形式チェック「ですら」
… >>473
正規表現だけでEメールアドレスの文字列があっているかどうかを一発で判定する正規表現を考えればいい。なかなか難しいぞ。 語彙って親や育った環境で大差がつくんだよな。知らない、あまりその人が聞かない言葉や言い回し見たり、聞いたりすると言葉がおかしいなどと批判してくる。本人が無知なだけなのに。 SQLの書き方で質問ですが、
AND句は行の先頭に書くか、行の末尾に書くか、どちらが一般的でしょうか?
(例1)
WHERE
A = 1 AND
B = 1
(例2)
WHERE
A = 1
AND B = 1
SQLの書き方ガイドラインのようなものがあれば教えてください。
よろしくお願いします。 >>480
そういう決まりはない。プログラミング言語と同じで改行せずにANDがあれば条件の続きがあるとわかりやすいが、コメントアウトしにくい。
selectの選択列のカンマ位置と同じようなもの。 うちは
where 1 = 1
and a = 1
and b = 1 UNIONやサブクエリ入るとまたちょっと変わるけど基本的に
select tableの選択セクション whereの条件セクション orderとかのその他セクション
この3つで分ける程度だな 技術士の全部門をコンプリート vs 東大理三首席現役合格 vs 旧司法試験首席一発合格
どれが一番凄い? >>481, 482, 483, 484
返信が遅くなってしまいすみません。
レスありがとうございました。
>selectの選択列のカンマ位置と同じようなもの。
なるほどそうですか。
例1も例2も好きなほうでよい、ということですね。
(例1)
SELECT
A, B, C,
D
(例2)
SELECT
A, B, C
, D
勉強になりました。 条件の内容を最初に見たいからandは後ろにつけてる。
前にあると地味にイラっとする。
where
a=1 and
b=2 >>486
東大理三首席現役合格
正真正銘期間限定延期不可一発勝負なのはこれだけ カスタマーエンジニアってどうですか?収入面とか労働面で。
楽ですか?それとも超キツイですか? このどうですか厨は、いろんな板で荒らしているだろ
相手せず、スルーしようよ C#からsqliteを使っているんですが、データベースの設計方法がわかりません、第2正規化以降って必要ですか?
必要なデータを洗い出してそこから正規化していけばいいんでしょうか?もしある程度レコードが増えた状態で新たに項目追加したいとなったらどうすればいいんでしょうか? そりゃ設計のスレだな
追加したカラムに既存のレコードも全部埋まるなら追加でいいし
埋まらないなら別に作るべきでしょ >>495
すいません
では設計スレのほうにいきます mybatis使っててDBに定義されたBLOB型のデータをバイト配列として取得する方法ってありますか? >>498
調べたらそれ普通じゃねえか。すこしは調べろよ。 https://goo.gl/q9Ml0S
これは嘘でしょ?本当だったら落ち込むわ。。 アホかと思われるかも知れませんが、
こうするとエロラーになります。
何か良い方法ないですか?
Select *
From テーブル2 ←──┐
Union All │
Select * │
From (サブクエリ) As テーブル2 >>502
ネタですか?
名前がぶつかっているのだから、あたりまえでしょうがw >>503
すいません、駄目なのはわかってて、
こういうのがやりたい時はどう書くのかなと。 どういうことをしたいのか質問内容を具体的に書かないと伝わらないぞ すごく具体的な質問だと思うけどどこが分からないのか?
クエリの結果を二重にしたいだけだろ サブクエリーを使いたいと言うことかもしれないし、
単一テーブルから二通りの選択をして結果を合算したいのかもしれないし なぜ聞かれてもいない事を深読みして答えようとするのか?
どうにかして自分が知ってる事に結びつけようとしてるだけだろお前ら >>502
unionはテーブル名見てるんじゃなくselectの中身見てるだけ
だから別名付けてどうぞ >>513
unionを同じテーブルとでしか使えないと思い込んでると仮定したわけか? >>505
>>506
こういう嫌がらせみたいな表があるんですよ。
商品名 単価1 単価2 単価3
もょもと 100 200 300
すけさん 120
アイリン 500 990
これをUnionで縦に繋げれば綺麗な表になりますが、
普通にやると検索が3倍になるので、2回目以降は前回の抽出結果を参照したいんです。
Select 商品 単価1 From 元テーブル
Select 商品 単価2 From 1回目の抽出結果
Select 商品 単価3 From 2回目の抽出結果
>>513
別名でどう紐づけるんですか? あれ?
もしかして、Union Allじゃなくて、
単にUnionしたものに対して検索した方が速かったりします? >>516
綺麗な表ってなに?
またなんでそういう要求が
でる背景はなに? 速度が目的なら普通に検索して単価1-3の分離はクライアント側でやるのが現実的だろうね。
あるいは単価1-3をUNION ALLしたサブクエリから抽出する。賢いDBMSなら最適化してくれるかもしれない。 >>519
検索と表の整形です。
>>520
上の例では省略しましたが、
実際は、かなり横に長いんです。
商品名 単価1 単価2 単価3 ・・・ 単価50
おもいっきり横にスクロールしないと全体を見渡せない、
嫌がらせみたない表でしょう? >>522
あなたのいう綺麗な表とは?
縦にしたいの?
『おもいっきり縦にスクロールしないと全体を見渡せない、
嫌がらせみたない表。』
を作りたいの?
何が便利になるの? 商品名を抽出したいのか
商品名に対するいずれかの単価を抽出したいのか
商品名に対する全ての単価を抽出したいのか
それにしても、単価1から単価50まで並べるというのは苦痛だ
そういうテーブル定義作った奴を縛り首にした方が後々良い結果がでる >>523
データベースって普通縦なんじゃ・・・。 >>523
縦にしたいです。
うちの会社のマウスホイールは、
全部縦に回るので、縦の方が便利なんです。
この表作った人のは、横に回るのかも知れませんが。
>>528
>商品名に対する全ての単価を抽出したいのか
それです。 一つの商品に50種類もの単価が付けられると言うのは、そういう理由があるわけでしょ?
例えば、一つの商品に50個のパーツが必要でそれぞれに単価があるとか
あるいは50の地域での販売単価とか
そういう小項目も合わせて表示しないと、
意味不明の50行の単価出力にならないかな? おれなら実テーブルを変更して、元テーブルと同じ形のビューつくるけどな >>503
> 名前がぶつかっているのだから、あたりまえでしょうがw
>>513
> だから別名付けてどうぞ
なんか、同名だと駄目で当然的な流れだが、PostgreSQLではエラーにはならない。
エラーになるのが普通なのか? >>539
> 普通とは?
その疑問の意味がわからない。 インラインビューの別名に実テーブル名を使う心理がわからない。混乱するだけだと思うが。 もはや後に退けなくなった意地の質問返し
不毛である >>541
え?いやだからPostgreSQL以外のRDBMSじゃエラーになるのが普通なのかって意味だけど? >>545
そうなんだ。
いや、>>503に誰もコメントしないから、エラーになるのが普通なのかと、ちょっと心配したし。 >>542
ひょっとして、PostgreSQL以外では以下はエラーになるのが普通なの?
select * from (select a, b from hoge) as hoge
まぁ、俺も実在のテーブル名を別名につけようとは思わないんだが。 >>547
心配するな、俺の知ってる範囲ではそれはエラーにならない >これをUnionで縦に繋げれば綺麗な表になりますが、
>普通にやると検索が3倍になるので、2回目以降は前回の抽出結果を参照したいんです。
select一回で全項目を取得して、後はアプリにやらせるとか なんかよくわからんが、case whenでいけるかもよ?
データ例と期待する取得結果を書けば、ちゃんとした答えが返るかも
いまのとこ、何をやりたいのかいまいちわからん こういうこと?
RDBの縦持ちテーブルと横持ちテーブル、およびその変換について
https://gist.github.com/aamine/5565025 実体が横持ちになっているのが気に入らないが、とりあえず縦持ちのように参照するためにUNION ALLを行った。
しかし縦を横にするクエリはまだ知らない。
というところなんじゃないかな。
そのクエリがわかれば、実体を縦持ちにするのもやぶさかではないみたいな。そんな感じがする。 流れがおかしくなったのは >>503 が照れ隠しのために話を流したかっただけだと思う。 まぁ、価格カラムが50個あるので50個のクエリをunionで繋げました、よりは、クライアントで頑張る方がいいと思う
縦横変換もクライアントで頑張った方が簡単かつ検索コストも低そう まず価格カラムが50個もあるのが設計として妥当か考えるべきだがな
相関名の有効範囲がUNIONを超えるかどうかがエラーにするかどうかの境目か
そもそも実テーブルと同じ相関名ってエラーになるのが標準仕様だっけ? だいたい別の意味の価格だから別カラムで持っているのが普通だから、質問した人間がわかってないんじゃないのか? 物凄く初歩的で申し訳ないのですが、SQL Server2008をSQL Server2014へ
アップグレードでインストールした後、不要な2008を消したいんですが
普通にアンインストールでいいものなんでしょうか。 >>563
どうりで出てこないわけですわ。板が違うとは。
ありがとうございます。 いやまあここの板にもあるけど、DBの内容とインストール関係は別の話だな
Microsoft SQL Server 総合スレ 11
http://echo.2ch.net/test/read.cgi/db/1464508208/ 社員
社員ID、名前
社員情報
社員ID、血液型、生年月日、性別、身長
身長170cm以上の社員の名前を取得するSQLってどう書けばいいのでしょうか?
SELECT 社員.名前
FROM 社員情報
WHERE 社員情報.身長 >= 170
これで出てきますか? 社員情報に名前入れろや
お前は名無しの社員ちゃうやろアホか システムがデータベースを使っているのでどうにもできないのです
ざっくり見た感じですが、こんな感じになっていたと思います >>572
怖くて教えられない
なぜSQLを知らない人が仕事用のデータベースをいじろうとしているのか sqlなんて基本以来10年近くいじってないワイが適当回答すると
SELECT 社員.名前 FROM 社員情報 WHERE 社員.ID IN (SELECT 社員情報.社員ID FROM 社員情報 WHERE 社員情報.身長 >= 170) >>567
こうかな?
SELECT 社員.名前
FROM 社員, 社員情報
WHERE 社員情報.身長 >= 170 AND
社員.社員ID = 社員情報.社員ID >>567
社員IDで紐付いてるとかを勝手に想定してくれる訳じゃないので指定してやらないとな
SELECT 社員.名前
FROM 社員情報
INNER JOIN 社員 ON 社員情報.社員ID = 社員.社員ID
WHERE 社員情報.身長 >= 170
>>569
機微な情報は別テーブルとか普通にあるだろ >>577
機微な情報は別テーブルとかないし
別テーブルにする意味もないし
そもそも社員の名前は機微な情報ではない
まあ、お前のような多重に勘違いした独り善がりの馬鹿によって作られた
>>567のような出来損ないのスキーマはたまに見かける
あ、勘違いしやすいみたいだから一応断っておくけど
これ褒めてるんじゃないからねw 大雑把な性格の俺的には、こうかな?
SELECT *
FROM *
LEFT JOIN *
ON * = * >>578
> そもそも社員の名前は機微な情報ではない
ここまでバカだとは...
機微な情報の意味わかってないだろ w >>581
もう一つ勘違いしてるみたいだけど
2ちゃんだって素直にありがとうって言ってもいいんだからね ありがとう2ch
>>578 みたいなバカがいるってことを教えてくれて
これでいいかな w >>581
機微な個人情報 JISQ15001:2006
・思想,信条又は宗教に関する事項
・人種,民族,門地,本籍地(所在都道府県に関する情報を除く。),身体・精神障害,犯罪歴その他社会的差別の原因となる事項
・勤労者の団結権,団体交渉その他団体行動の行為に関する事項
・集団示威行為への参加,請願権の行使その他の政治的権利の行使に関する事項
・保健医療又は性生活に関する事項 >>584
それもそうだけど
>>581はそもそも社員テーブルに社員名がない事の理不尽さに気がついていない
馬鹿がその視野の狭さ故に犯す誤りの典型だねw マウンティングとかアホなワードがバズったおかげで、>>586みたいな馬鹿が出てくるんだよ >>578
> 機微な情報は別テーブルとかないし
いや、あると思うよ。
> 別テーブルにする意味もないし
異なる読み取り権限を設定できる。 機微な情報で氏名とか言い出すアホがいて笑える
どう見ても
> 社員情報
> 社員ID、血液型、生年月日、性別、身長
の方だろ schema.ini作るの面倒なんだけど、何とかならん?
テキストファイルにはIMEX=1も効かないし。 すみません、質問よろしいでしょうか
SELECT name,max(no)
from test;
これがエラーになるんですが何がいけないんでしょう?
noの最大値を持つ行のnameが知りたいだけなんですが…… SELECT name, no FROM test WHERE no = (SELECT max(no) FROM test)
こうかな >>597さんのがまさに求めていたものでした!
whereかhavingで迷ってたんですがwhereだったんですね!
>>598さんも本当にありがとうございました! サイズ違いの商品を送り 返品交換できない 悪質商法 ****E
サイズ違いの商品を送り 返品交換できない 悪質商法 B**
悪質オンラインショップ
か
担当者が悪質か
2回目のでんわたんとう窓口は すりかえようで いみふにごまkして
----------------------------------
**** *** オンラインショップのアイテムは独自の方法により採寸しておりますので、
全て実際の商品を計測した実寸サイズとなっております。
ご注文いただいております商品サイズは、正しいものでございます。
誠に恐れ入りますが、サイズが合わない、イメージと異なるといったご理由での
ご購入商品の返品・交換はお断りさせていただいております。
お客様のご希望にそう事が出来ず誠に申し訳ございませんが、
何卒ご了承の程よろしくお願い申し上げます。
----------------------------------
24いんちって Mですか? WEBの説明と実際の商品が違う 今の会社があまりにもくだらなくて転職のためSQL覚えたい
今はExcelで簡単なVBA書いてる
独学でもどこかにまず入れるだろうか…
それとPostgreSQLとMySQLとどちらがいいのか教えてください >>604
安心して
いま四種類同時に使ってるから 4種類、じゃ全部視野に入れます
4つ教えてください 標準SQLを覚えるならOracle Express Editionを入れて
alter session set flagger=entry; とか >>606
oracle
srl server
mysql
postgres DB2も入れてやれ
Express-Cっていう無償のエディションもあるぞ >>607>>608>>609
ありがとうございます!
もうVlookupひとつしか使えない人たちに便利屋扱いされたうえに勝手な都合でくだらない作業詰め込まれるのはゴメンです
最初から綺麗に無駄なく作っておけばいいのに…
でもそれを更に汚くしたのは短期で来た素人自称プログラマ
VBAばかり走らせて荒っぽい処理してエラー残骸があちこちあったり重複ばかりのファイルを量産してった
プログラム覚えてもああいう仕事は絶対したくないと思う
取っ掛かりとしてSQL覚えてその次Pythonとかも覚えたいです
絶対今のところ抜け出してやる すいません、質問させてください。
mySQLとSequel Proを使ってテーブルまで作成しています。
レコード登録時に、2つのIDをくっつけて
3つめのIDをSQL内で自動生成したいのですが、
何か効率的な方法はありますでしょうか。
ID1: 100(手入力)
ID2: 101(手入力)
↓
ID3: 100101(自動生成)
データ型はいずれもINTで設定しております。
よろしくお願いします。 >>613
それ、2行登録したら1行自動生成するってこと? >>613
行列、列行なのかわからない聞き方だが、それが列、カラムだと想定すると、トリガーでも作らないとできないだろうな。
同じレコードのカラムから導出したデータを別カラムで持つのも馬鹿っぽい。
しかも数値型を連結するなら、いったん文字型に変換しないといけない。
なんでそんなことをしたいのか。ID3なんてビューを作ってみせればいいんじゃないの? >>614
>>615
すいません、DBわかってなくて失礼しました。
ID1 ID2 ID3 name
100 101 100101 hoge
101 201 101201 fuga
ID1とID2を繋げて、ID3を生成したかったです。
プライマリキーとは別に、識別用としてのユニークなIDが必要なので。
単純に繋げるには、文字列でやらないとダメみたいですね。
ありがとうございます。 ID2が2桁の時どうするの?
ID1と2と3は同じレコードのカラムなの?
手入力ってINSERT文書くの? lpad()で0埋めしてcontat で連結して castで数値にする手もあるけど
実行時に必要ならビューでいいよね >>617
ID1, 2は3桁のものしか用意しないので基本的には問題ないかと。
すべて同じレコードのカラムですね。
先に手入力と書きましたが、実際はほぼクライアントツールの
インポート経由で登録になります。
>>618
ビューってのがあるんですね、調べてみます。
ありがとうございます。 >>619
3桁で計算もしないなら、データ型が数値型なのは変だよ。 >>620
お前の根拠もない意見なんて聞いてねえから >>621
初心者は数字は数値と思い込むのはよくあることだろ。 何でこんなに質問外の話を夢中になって始めるか、理解出来ない >>624
初心者は質問内は質問外と思い込むのはよくあることだろ。 >>619
どちらも数値で桁数が3桁固定なら、ID1 * 1000 + ID2でどうだろうか number(string(id1) || string(id2)) insert時かselect時に導出すればいいようなものをなんで別カラムで持ちたがるのか、理由をまったく言わないからなw SELECT column1,column2,column3
FROM table123
WHERE column1 like '%hoge%' OR column2 like '%hoge%' OR column3 like '%hoge%'
こういうクエリがあるんですが
column1〜3で2つのキーワードのAND検索をしたい場合どう書けばいいのでしょうか?
SELECT column1,column2,column3
FROM table123
WHERE (column1 like '%hoge%' AND column1 like '%drz%')
OR (column2 like '%hoge%' AND column2 like '%drz%')
OR (column3 like '%hoge%' AND column3 like '%drz%')
以下のように書いたのですが検索できませんでした
またもっとシンプルに書く方法があれば教えてください そもそも
>(column1 like '%hoge%' AND column1 like '%drz%')
同じc1カラムにhogeとdrzの両方があるもの、というのはあってるの? 失礼しました、よく考えたら違いました
column1〜3でhoge、drzとあればいいんです
column1にhogeとあってcolumn2もしくは3にdrzとあるものを抽出したいのです
WHERE ((column1 like '%hoge%' OR column1 like '%drz%') AND (column2 like '%hoge%' OR column2 like '%drz%'))
OR ((column1 like '%hoge%' OR column1 like '%drz%') AND (column3 like '%hoge%' OR column3 like '%drz%'))
((column1 like '%hoge%' OR column1 like '%drz%') OR (column2 like '%hoge%' OR column2 like '%drz%'))
すごく長いですがこんな感じなのでしょうか?
もっと綺麗にかけないのでしょうか? RDBMS何?
正規表現使えるやつならかなり短くできるけど、、
標準でもなんとかなるかな、長くてまだよく見てないw まだやりたいこと読み切ってるわけじゃないが
ANDの部分をサブクエリにすれば同じ検索を2回書かなくて済みそうだね >>636
それだとhogeしかない場合でもマッチしてしまうんじゃないか? where column1 || column2 || column3 like '%hoge%'
and column1 || column2 || column3 like '%drz%'
でいいと思う(|| はDBごとに適切な文字列連結演算子に読み替えて)
部分一致じゃあどのみち普通のインデックスは使えないし
速度を出したいならちゃんとした全文検索機能のあるDBを使うべき >>634
WHERE column1 + ',' + column2 + ',' + column3 like '%hoge%' and column1 + ',' + column2 + ',' + column3 like '%drz%' >>640
それ column1 = 'ho', columu2 = 'ged', column3 = 'rz' でヒットしちゃうぞ >>642
連結する時に適当なセパレータ文字を挟めばいいやん。 >>636
そういうもの。
対象のカラムやキーワードの数が変わっても困らないような動的クエリの仕組みに頭を使った方がいい。 もしcolumn1/2/3が相互に交換可能なのだとしたら第一正規形ではないことになるが、
>>636だけからはデータモデルがおかしいと断言はできんだろう。 no existか積集合演算子でできるが、このSELECT文がメインだったらデータモデルがおかしい。 データモデル厨は要らんよ
まあケチ付けたいだけなんだろうけど フィールドを>>640みたいに|| で文字列連結するのって、内部で何が起こってるんですか?
ORより速いんですかね?
ORより積極的に使った方がいいですか? 内部で何が起こってるのかを気にする必要がないのがSQLの良いところやで
実行速度が気になるんだったら自分で目的に最適化したDBを作ったほうが速い まあそれは建前であって実際のところは内部動作もある程度知っていないと
使い物にならないことも多いからねえ
自動チューニング的な機能があったとしても
その機能自体がどのように動くのか知らないとやっぱり上手く使えなかったり >>641
返信遅くなってしまいすいません
文字列を連結させてればいいんですね、やってみます >>649
内部ではいったんそういう表が作られて、それを検索している。 >>649
それぞれのカラムにインデックスがある場合。
まず、文字列を連結するとインデックスは使われません。
ORを使うと、全件検索(テーブルスキャン)よりもインデックスを使う方が速いと判断されれば
インデックスが使われます。
なので、ORが使えるならORを使うのがよいです。
さらに言うと、完全一致検索(hoge = 'aaa')と前方一致検索(hoge like 'aaa%')はインデックスが
使われますが、それ以外の場合(hoge = 'aaa%', hoge = '%aaa%')では、普通はインデックスは
使われません。(データベースの種類によっては、特殊なインデックスを作れるものもある) >>657
ではどのように処理しているのかご教示を。 >>658
ループしつつ文字列比較でフィルタリングでしょ
一時テーブルなんか作るメリットゼロ >>661
一部を除いてみんな正しい
まとめると、
・レコード数が少ないなら文字列結合してLIKE検索しろ >>641
・ORと文字列結合を比較するなら、ORの方がインデックスが使われるという面で優れている
・ただしLIKE検索の場合は、前方一致のみインデックスが使われる(普通は)
・普通じゃない方法は、データベース毎に異なる(フルテキスト検索用インデックスを作ったりとか) DBはMariaDBです
issueテーブルとissueConnectionテーブルがあります
こんな風にして、階層化された複数のイシューが連なる設計です(・・・あまり設計よくないかもです)
■issue
ID
(以下略)
■issueChildren
ID
issueID
childIssueID
あるイシューの子イシューを取得したい場合、たとえば100番の子イシューであれば
SELECT * FROM issue INNER JOIN issueChildren ON issue.ID = issueChildren.ID
WHERE issueChildren.issueID = 100;
でいいと思うのですが、孫まで含めてクエリーで取得したい場合はどうすればいいのでしょうか?
要件では子と孫まででOKで、ひ孫からは不要らしいです。 孫まででいいならissueChildrenをもう一回JOINするだけ
末代まで辿りたいなら再帰問合せ もしかしてループってるかもしれないからチェックいるね >>664
具体的にどう書けばいいですか?
>>665
それはデータ的にはないようです >>666
実際にないなら良いんですけど
テーブル定義はそれを排除している訳ではないので >>668
さあね、RTRIM、LTRIMがあるからとりあえずいいだろうということなんだろ。 LTRIMって、やっぱエルトリム?
それともリトリム?
俺はどっちでもいいと思うんで、
どっちでもいいと思うんだけど。 リトリムだとRTRIMもリトリムになるし...
巻き舌とかで区別する?w 僕はシリコンバレーだけど、
エルティーアールアイエムって呼んでる うちのかあちゃん、
TRFを無理矢理トリフって読んだぞ。 伝票ID、顧客名、売上金額、売上月というテーブルがあるとします
顧客毎の各売上月の合計を問い合わせしたい場合どうすればいいのでしょうか?
売上月、顧客名、合計金額という風に出したいですが、一つ一つ顧客名毎に問い合わせするしかないのでしょうか? >>683
それぞれの顧客に電話して聞くしかないな。 select `顧客名`,`売上月`,sum(`売上金額`) as `合計金額` from TABLE
group by `顧客名`,`売上月`; SQLの神さま、み教えを!
二つのテーブルを比較し、複数項目(7項目)の値が全て合致した行の
1項目をアップデートをしたいのですが、長ったらしいSQLになってしまいます。
シンプルな記述で実現する方法は、ありますでしょうか?!
お願いします! 長ったらしくならないので下手なことをせずそのままがいいように思う Oracleだと
where (a1, a2, ...) = (b1, b2, ...)
みたいに書けちゃうけどまあ普通は
where a1 = b1 and a2 = b2 and ...
しかないな >>694
文字列にして連結して比較する作戦はどうかな? >>694
それNULL=NULLをどうするのかで問題がでる
NULLの項目があってそれをまじめに考えたら
結構長ったらしくはなる SQL Serverです。
商品No 価格1 価格2 価格調整コード 調整価格
10000 1,000 1,100 001 200
10000 1,000 1,100 002 100
10000 1,000 1,100 003 100
12000 600 700 001 50
13000 800 850 001 100
13000 800 850 003 50
価格調整コードが'001'か'002'の場合は、
調整価格を価格1に加算し、
価格調整コードが'003'の場合は、
調整価格を価格2に加算する。
その結果を、商品Noから一意で取り出せるビューにしたい。
※イメージ
商品No 価格1(調整後) 価格2 (調整後)
10000 1,300 1,200
12000 650 700
13000 900 900
これをSQLだけで作ろうとしているのですが、無理でしょうか。 case when 価格調整コード = '001'などを入れて、
下記のようにしてみました。
商品No 価格1 価格2 価格調整コード 調整価格 001価格 002価格 003価格
10000 1,000 1,100 001 200 200 NULL NULL
10000 1,000 1,100 002 100 NULL 100 NULL
10000 1,000 1,100 003 100 NULL NULL 100
12000 600 700 001 50 50 NULL NULL
13000 800 850 001 100 100 NULL NULL
13000 800 850 003 50 NULL NULL 50
これを、001価格〜003価格のNULLの部分を統合して、
1行で表示できるイメージでもよいです。
※イメージ
商品No 価格1 価格2 価格調整コード 調整価格 001価格 002価格 003価格
10000 1,000 1,100 001 200 200 100 100
12000 600 700 001 50 50 NULL NULL
13000 800 850 001 100 100 NULL 50
プログラムができないため、SQL Management Studioで
SQLだけうって表示できればと思っています。 >>697
>商品Noから一意で
それ、元価格が複数あったりしたらどうするんだよ
とりあえずそのデータでなら
select distinct
商品No,
価格1 + (select ISNULL(SUM(調整価格),0) from テーブル where 商品No=t.商品No and 価格調整コード in ('001','002')) as [価格1(調整後)],
価格2 + (select ISNULL(SUM(調整価格),0) from テーブル where 商品No=t.商品No and 価格調整コード in ('003') ) as [価格2(調整後)]
from テーブル t
で行けるんじゃね >>695
セパレータつけないと
'abc', 'de' と 'ab', 'cde' が一致しちゃう
絶対に値に含まれないセパレータがあるならいいけど >>697
「イメージ」じゃなくて、そのデータの完全な結果を示せ >>697
まだ設計変えられるんだったら、正規化した方がいいかもよ 結合した結果を表示してるのかもしれないし、そこはなんとも。
>>703
意味不明なの? 無理だと思ったらなんだって無理なんだよ
聞くならせめて「可能でしょうか」と聞け > 意味不明なの?
>>703 には
ってことでしょ
>>699 の
> それ、元価格が複数あったりしたらどうするんだよ
を見たら普通正規化しろって思うと思うがまあここ初心者スレだから >> それ、元価格が複数あったりしたらどうするんだよ
>を見たら普通正規化しろって思うと思うがまあここ初心者スレだから
それはクエリの話であって正規化とは全然関係ないな。 >>699
ありがとうございました。これでできました!
元価格はひとつです。
いろいろご意見ありがとうございます。
最近勉強始めたもので、正規化などこれから勉強中です。 >>707
> それはクエリの話であって正規化とは全然関係ないな。
全く理解してないのがよくわかる秀逸なレスだな w 価格1 価格2 というカラム名だけ見て脊髄反射で
「第一正規形じゃない」と思い込んじゃったんだろう。 >>710
商品テーブル: {商品No}, 価格1, 価格2 ({ }はPK)
調整価格テーブル: {商品No, 調整コード}, 調整価格
ってことじゃないの?ってことだろ SQLの神さま!
非正規化テーブルから
正規化テーブル1、正規化テーブル2へ
同時にインサートする時に、
正規化テーブル1、2それぞれに同じ連番を振りたいのですが、
シンプルな方法はありますでしょうか?
ちなみに連番フィールドは、主キーです。 >>712
シンプルな方法を聞く前に、データベース設計の入門書をまず嫁 >>712
RDBMSによると思うので使ってるもの書いてくれ 質問ですが
カラムに
[年齢]、[種別]、[時間]
があったとした場合に [時間] の最新の100件だけを対象に合計、平均を出したいと思っています。
↓ に何を追加したら何を追加したらいいでしょうか?
SELECT SUM(年齢) AS 年齢の合計 , AVG(年齢) AS 年齢の平均 , 種別
FROM 従業員マスタ
GROUP BY 種別 fromを、limitとかoffsetとか使ったサブクエリにすれば良いんじゃね >>718
limit と offsetを使ったら簡単にできそうですね。
まったく知らなかったので助かりました。ありがとうございました。 年齢なんか合計してどうすんだ?年齢層を知りたいなら平均で判りそうなもんだが 対抗戦のチームで年齢合計を条件にすることありそうなw SQL serverはマイクロソフトのデータベースだよね?
ただSQLっていったら何になるのでしょうか?? >>725
リレーショナルデータベース製品のことを言っているなら、SQL Serverを「SQL」と呼ぶ人間もいるし、MySQLのことをただ「SQL」と呼ぶ人間もいる。
どちらの略し方もお勧めしない。 製品名が「SQL」が入ってるんだからどちらも自然な略し方じゃないか
他人の略し方をとやかく言うな すごい混乱するんだよね
ちゃんとまだ理解してないから
SQLserverからSQL文でデータを抽出するって自分は思ってるけど違う
またはSQLserverからMysqlを使ってデータを取得する、とか
混乱のポイントはSQLserverをデータベースじゃなくてMysql とかPostgresqlと並列で捉えて話している人とコミニュケーション取っていること
途中で頭混乱して何がなんだかわからなくなる
まとめると
SQLserverやOracleはデータベース名
ゆえにプログラミング言語じゃない、でいいかな? SQLserverからSQL文でデータを抽出するって自分は思ってるけど違う?
疑問形でした >>730
ORACLEはデータベースで、という意味であえてSQLserverと並べたんだけど どなたかすっきりと正しい定義を書いてもらえないでしょうか?
検索してもそれぞれ少しずつ違い混乱してる… >SQLserverからMysqlを使ってデータを取得する、とか
何言ってんだ? 「sql server」
SQLを理解するインタープリターサービスを提供するサーバー型アプリケーションの総称
「SQL Server」
Microsoft社が製造・販売を行なうRDBMS製品 >>737
はぁ?
SQLserverからsqlを使ってデータを取得する
だったら判るよ
MySQLはまた別個のRDBだろ?お前馬鹿? >>735
じゃあデータベース自体は他にあると思っていいの? 煽るだけでスマートな答え方しない人は説明できないんでしよ? >>740
「データベース」ってのはただのデータの集合を示す概念 じゃあ
RDBMSという括りの中に並列して
SQLserverもMySQLもpostgresqlもあると思っていいんでしょ? >>740
データベースとは読んで字のごとくデータの事でありソフトウェアはあくまでもデータベースを利用・管理するためのものだけど?
「テキストファイルで作文書く」って変だろ? >>742
わかった
データベース自体はなんとかってメーカー名とかはつかないってこと? >>745
わかった
ありがと
全部それぞれ親戚だけど少しずつ違う言語と思えばいい? うちの会社はデータベースに独自の名前つけてるからそれがメーカー名製品名なのかと思ってたんだ
でもその大元がoracleでそれを企業用カスタマイズしてて、だからoracleがデータベースというのかと思ってた
それと同じにms SQLserverも考えてた そのレベルの話ならここで質問するよりWikipediaとかで調べた方が
嫌な気分にならなくてお互いハッピーだと思うぞ。 >>747
ごちゃごちゃ考える前になんで入門書の一つも読もうと思わんの? そう思ってとりあえず本も買ったんだけど、そもそものところに帰ってきた
wikiも読んだ
けど会社で説明受けてまた混乱してきて
たぶんいろいろ略してる人で
ちょっと余談だけど、どうもソートを抽出の意味で使ってくるんだよ
Excelでもオートフィルタでデータ絞る時にソートして、って言ってくる
はーっ???となる
ソートは並べ替えだろ?
もう説明がめちゃくちゃで脳内変換しながらですげー疲れる ちょっと不安になってきたんだけど
どう考えたって
ソート=並べ替え
でオートフィルタで絞ることじゃないよな?
もう当たり前過ぎて聞いてて馬鹿馬鹿しくなるんだけど、その人に仕事教わった人はみんなフィルタ機能をソートするって言うんだよ
自分ひとり、はっ??となって
あまり続くと自信なくなってくる >>746
データベース(データの集合)を扱うためのソフトウェアがDBMS。これがOracleとかSQL server。 まぁ用語の使い方がデタラメな連中が多くて混乱するってのは同情するけどさw >>747
それぞれのDBMSで使うSQLはSQL標準に準拠してはいるんだけど、DBMSによって多少方言はある 脳内変換してるんだけど、いつか変換しなくてよかったのにー的間違いしそうで疲労がすごい >>756
おけ
ここらへんになれば確かに買った本に書いてある通りだ
これ買った
https://www.amazon.co.jp/SQL-第2版-ゼロからはじめるデータベース操作-プログラミング学習シリーズ-ミック/dp/4798144452 は?と思ったそのときにどういう意味か確認すりゃいいのに。
一応プログラミングじゃソート=並べ替えが普通だけど、一般には分類、選別っていう意味もあるからな。 >>760
んーできてたらするんだけどさ
できない空気なわけで…
そう広義では近しいから突っ込みにくい
けど明らかに絞りなんだよな…
はぁーどっかでしれっと質問するわ お願いあるんだけど、質問する時は、出来るだけアゲて欲しい
そうするとID表示されるので、質問者のレスを追いかけやすい
誰が質問し誰が回答しているか分からなくなるとちょっと困る いつだってアゲアゲでいいじゃんか
むしろなんのためにわざわざさげんだよカス 日本マイクロソフトの人間もSQL ServerをSQLと略すやつがいるんだよな。
SQLのことはクエリやコマンドと呼ぶから混乱しないw MSSQLかSQL Serverなら混乱しないよね >>767
あーなら単にsqlならせめてsql文とかそういうこと? 上で質問連打してたやつ
誰も決め手を書いてあげないからなかなか納得いかなかったようだが
SQL=言語と言ってあげればいいじゃん
それが日本語なのか英語なのかフランス語なのかそういう違いだって
日本語で卵ちょうだいっていうのと英語で卵ちょうだいは言葉が違うでしょ?って >>769
いやだからSQLはSQL Serverの略だってば >>770
だからお主はそのつもりでも
そうじゃないやつがいるから混乱すんだべ
クエリをsqlっていう奴がいるから お題
「どなたかSQLを共有してくれますか?」
というメールが流れた
これはなんぞ? >>768
単にSQLなら問い合わせ言語のことだなぁ
あえて明示的に区別したいならSQL文だろうけど
データベースを集積されたデータとそれを操作するアプリケーションとで区別したいなら後者をDBMSと言うべきだけど前者は普通にデータベースって言うでしょみたいな >>771
知るか他人のことなんかw
混乱してるなら混乱したままの現状を理解しろよw >>777
だからわかんない中で意味を汲み取れよー
なんだろ?w >>778
混乱してる事と元々意味が通らない事では天と地ほどのひらきがあるぞw
そうゆーとこ区別しようなw まずほんとに自分のも子供も大事にすんなら
2ちゃんなんか見ないだろうからな
見てる時点でクズ >>773
DBMSはデータベース管理システムのことだぞ? >>789-790
通じるわけないだろお前のオレオレ定義なんかw
普通に勉強してくださいw ただSQLって言ったらmysql,sqlserver,postgresql他含めそれぞれの言語いうものと思ってきた
SQL=SQLserverとは即ならないんだが…
もちろんSQLserverを用いてる環境で話してるなら別だがこういうとこではすぐにそのMS社製品だけを特定して結びつけないが…
なんかおかしいだろうか? >SQLはSQL Serverの略だってば
ドヤ顔でこういうの会社でも言ってんだろーなー >>770
だったらmysqlはsqlとは言えなくなるよ >>799
はあ?MySQLはSQLだろw
なんだよ言えなくなるってw >>801
おまいさんがこれ言ったからだろ
0770 NAME IS NULL 2017/06/18 19:20:57
>>769
いやだからSQLはSQL Serverの略だってば
ID:c1GtVOfY(5/11) >>801
初心者スレやでここは
キチガイは出ていきな ID:c1GtVOfY
言ってること支離滅裂になってきてるけどだいじょぶか?
日曜の夜だから酒でも飲んでだいぶ酔ってるんじゃ? >>802
多数派はマリアだろうな
SQL Serverをサーバーと略す一派ならDBと言うかも知れんがw >>808
いやおかしいでしょ
SQLserver=SQLって言ってたじゃん
つかw
そううえサーバーっておかし過ぎだよ
DBって…
大丈夫この人? お前らのまだ概念とアダ名で
ごちゃごちゃいってるのw >>811
ごちゃごちゃ言ってるのは一人のようだが >>808
サーバーwwwウケるwww
とか言えば満足かい? >>811
ほんじゃ超初心者に
SQL=SQLserverと指南し
その挙句場合によっては
SQLserverをサーバーと略すってそりゃやべーだろ >>809
知るかよw
どう略すかなんてそいつの感性次第なんだからw
そこにやたら食いつくお前がどうかしてる
現実を受け入れろw >>817
こういうのが職場で話通じないやつの実態なんだって見せてもらった気分だよ
いるんだよ、どこまでも平行線なやつ
アイタタ… >>817
つまりお前は他人の感性がおかしく感じるから
自分の感性に合わせろと言いたいのか?
無理だろそんなもんw
てかよくそんな無駄な事にここまで労力使えるなお前w >>819
あんね、オレは817じゃないけど
感性感性ってさ、一応言語で確認する訳なんで通じなかったら意味ないのよ、って
なんでこんな小学生でもわかること説明してんだおいっ
ここはひまわり学級かっ
だったらあんたいきなりエマニュエルの件だけど、って言われてわかるか? 色んなやつが居ることを認める事をどうしてここまで悔しがる必要があるのかw
おもしれー奴だなコイツw 昼間その呼び方で混乱してた初心者
明日会社で恥かくぞ… >>824
だからわかんのか答えてみて
エマニュエルの件 言い方に幅があるからこそ最大公約数で確認してくんだろうが、まったく… >色んなやつが居ることを認める事をどうしてここまで悔しがる必要があるのかw
そういうのは共通の言葉が通じた上での話。
あんたはそれ以前 これじゃわかんないのが人の感性なんだよ
ドナルドって言われたらどこに思考がいく?
マクドナルドか?トランプか?
今なら一瞬考えてトランプだよな
オバマって言われたら一発でわかるよな
だから今はエマニュエルならマクロンなんだよ
おまえさんの言ってんのはその前振りが無い状態で、いきなりエマニュエルの件って言って周りが理解してくれないのを責められて、
んだよっ、マクロンて言えよと突っ込まれても、感性の違いだ、と言い張ってるのと同じなんだよ >>831
山田くーん、座布団いちまいあげてー
あー、やっぱり持ってっちゃいなさい すくなくともこのスレやSQL質疑応答スレで、SQL ServerをSQLと略すような奴の話は
まともに聞いちゃ駄目
感性がまともかどうかは置いとくが
その略しかたでは話が通りにくくなる事が理解できないやつなのは確かだから 教えて下さい
postgesql 9.3を使っています。
テーブルに
year
month
day
type
data
というカラムが設定されています。
select data from テーブル where year=2017 and month=1 and day=1 and type='a';
select data from テーブル where year=2017 and month=1 and day=1 and type='b';
これを1つの命令で type='a'の時のdata と 'b'の時のdata をまとめて出力したいのですが
どうしたらいいでしょうか?
select type=aのdata , type=bのdata from テーブル where ...
という感じの命令にしたいです
unionというものが使えそうだと思ったのですが、どちらがtype=aのものか判別の仕方がわからなかったです。 select type, data from テーブル where year=2017 and month=1 and day=1 and (type='a' or type ='b');
じゃダメなのか? >>833
そう思うだろ?ところがまともな回答してんも俺だけなんだよなあ >>837
俺をダメ認定するのはお前の勝手だけどそれでお前の能力が上がるわけでもないぞ?
むしろ自己満足のために周囲の評価は下がる方向だけどいいんかそれで?w >>835
返信ありがとうございます。
type a と type b で同一の年月日で別の data を持つ為、それを同時に出したいのです。
ですので、それではダメでした。
>>838
カレンダー表示させる為のSQLです。
日毎にtype a の data と type b の data を表にしたいのですが、
できれば年月日を一回のループで終わらせたいのです。 ごめんなさい。自己解決しました
select t1.data , ( select t2.data from テーブル as t2 where year = 2017 and month = 1 and day = 1 and type = 'b' )
from テーブル as t1 where year = 2017 and month = 1 and day = 1 and type = 'a'
でいけました
もっと簡単に書けるかもしれませんが、一旦これで済ませます
助言ありがとうございました >>834
SELECT year, month, day,
MAX(CASE WHEN type = 'a' THEN data END) as data_a,
MAX(CASE WHEN type = 'b' THEN data END) as data_b
FROM foo
GROUP BY year, month, day fromの段階で2017年1月1日までは絞り込んじゃいかんの?
あとはCASE式でわければいいし >>846
クエリ1回で1ヶ月分だかの範囲取得したいんじゃないの?
しらんけど >>842
ちょっと悪い書き方だな。
だいたいSELECT句でtype列を選択してはいけない理由は何なのか? >>839
自分の客観的な評価を知ることができたとは思わないんだろうか PostgresSQLについて質問です
hogeテーブルに日時を2017-06-21 20:08:45のような形で保存しているdatetimeフィールドがあるとして、
「datetimeが現在日時から120分以内の行を抜き出す」場合にはWHERE節に何と書けばいいのでしょうか? >>853
where col between now() and now() + '120 minutes' すみません、言葉足らずでした
datetime列はそのときの現在時刻を入れていく列です
>>854のようにnowを使ってやってみます
ありがとうございました >>857
そこは解釈の問題
なので要件を確認した方がいいな そのときの現在時刻を入れていく列ってことらしいから
未来時間は入らないだろうなあ now() - interval '120 minutes'
と、intervalを明示しといた方がいい気がする テーブルとして
Hoge:カラム HogeId,Name
Tag:カラム TagId、Name
TagRelation:カラム Id、HogeId、TagId
のようなものがあっって要はHogeにTagをTagRelationを関連付けているとして、
TagとしてId=1、2、3のものがあったとしてその3つのTag全てへの関連を持つHogeを列挙したいとしたらSQL一発でできますか?
TagRelationでは同じHogeとTagへの関係が重複してあり得るものとします。
distinct,group by,count辺り使えばいけるのかな? おお、あざす。ああHaving句とか知らんかった。
SQLiteでdistinct絡めたものがなんかコンパイルエラーになるけれど大筋は分かったのでいろいろ試してみる。ありー 成果物おいときますね
セレクト ItemCommon.Id,ItemCommon.DisplayName
from (セレクトdistinct TagRelation.ItemId as itemId,TagRelation.TagId as tagId from TagRelation
where TagRelation.TagId in (
'eea01c2b-e0f8-418e-a942-d4e1f43e71f9',
'6668707d-ab6e-4e48-837d-b45ae3954360'
))
inner join itemCommon on itemId=ItemCommon.Id
group by ItemCommon.Id having count(*)=2
order by ItemCommon.Id SQL文を弾いてしまうの、どうにかならないものかな・・
中継クラウドがやっているようだ あまり話題にならないのは、レスでSQL文を書く用事があるのはこの板くらいだからかw 作業テーブル
ID、作業番号...
作業詳細テーブル
ID、作業ID、作業開始時間、作業終了時間...
作業明細テーブル(作業詳細テーブル 1-多 作業明細テーブル)
ID、作業詳細ID、作業内容、宿泊費...
うろ覚えですがこんな感じのテーブルがありまして、作業内容にhogehogeもしくはnullnullという言う文字列が入っている作業番号を知りたいまたは入っていない作業番号を知りたいのですが
試行錯誤しながら副問い合わせを使ってもできません。以下の感じになりました
// hogehogeもしくはnullnullが入っている作業番号
SELECT 作業番号
FROM 作業テーブル INNER JOIN 作業詳細テーブル ON 作業テーブル.ID = 作業詳細テーブル.作業ID
WHERE 作業詳細テーブル.ID IN
(SELECT 作業詳細ID
FROM 作業明細テーブル
WHERE 作業内容 LIKE '%hogehoge%' OR 作業内容 LIKE '%nullnull%')
// hogehogeもしくはnullnullが入っていない作業番号
SELECT 作業番号
FROM 作業テーブル INNER JOIN 作業詳細テーブル ON 作業テーブル.ID = 作業詳細テーブル.作業ID
WHERE 作業詳細テーブル.ID IN
(SELECT 作業詳細ID
FROM 作業明細テーブル
WHERE 作業内容 NOT LIKE '%hogehoge%' OR 作業内容 NOT LIKE '%nullnull%')
どうすれば特定の文字列が入っている作業番号を抜き出すことができるでしょうか?教えてください >>870
なんかおかしな結合条件になってるけどそれぞれのテーブルはIDで紐づけてるわけじゃないの? hogehogeもしくはnullnullが入っていない作業番号
ORじゃなく、ANDじゃ?と思った >>871
2番目以降、名前IDで紐付けしています
>>872
やっぱりそうですかね? >>870
速度考えなきゃ
-- hogehogeもしくはnullnullが入っている作業番号
SELECT 作業テーブル.作業番号 AS 作業番号
FROM 作業テーブル
INNER JOIN 作業詳細テーブル ON 作業テーブル.ID = 作業詳細テーブル.作業ID
INNER JOIN 作業明細テーブル ON 作業明細テーブル.作業詳細ID = 作業詳細テーブル.ID
WHERE 作業詳細テーブル.作業内容 LIKE '%hogehoge%' OR 作業詳細テーブル. 作業内容 LIKE '%nullnull%'
GROUP BY 作業テーブル.作業番号
で行けるんじゃね?
入ってない方は
SELECT 作業番号 FROM 作業テーブル
EXCEPT
SELECT 以下同文
でいいんじゃね? >>874
素直にFROM句で3つのテーブルを結合しろよ。 >>877
性能といいながら、そんなにコストの高いSQLを勧めるなよw 「ないものはない!」みたく、曖昧な表現だな
「速度を考えないで良いなら」と言いたいのでは? こんなんでどうだろうか
SELECT distinct 作業番号
FROM 作業テーブル,作業詳細テーブル,作業明細テーブル
WHERE
作業テーブル.ID = 作業詳細テーブル.作業ID AND
作業詳細テーブル.ID = 作業明細テーブル.作業詳細ID AND
(作業明細テーブル.作業内容 LIKE '%hogehoge%' OR
作業明細テーブル.作業内容 LIKE '%nullnull%');
SELECT distinct 作業番号
FROM 作業テーブル,作業詳細テーブル,作業明細テーブル
WHERE
作業テーブル.ID = 作業詳細テーブル.作業ID AND
作業詳細テーブル.ID = 作業明細テーブル.作業詳細ID AND
(作業明細テーブル.作業内容 NOT LIKE '%hogehoge%' AND
作業明細テーブル.作業内容 NOT LIKE '%nullnull%'); >>879
ほっといてやれよ
僕が考えた最強のSQLなんだから >速度考えなきゃ
速度も考慮しなくては
速度を考えなくてもいいなら
どっちにも取れるw >>881
作業内容にhogehogeもしくはnullnullを含むは検索できましたが逆ができません
いろいろ試行錯誤していても取り出せません
上記にも書いてあるんですが、作業詳細テーブルのレコード1つ対し作業明細テーブルのレコードが複数結びついているのでまたややこしくなっているんだと思います >>888
その作業番号に紐付く作業明細テーブルの作業内容に
hogehogeもしくはnullnullを含まないものがあれば抽出したいのか、
その作業番号に紐付く作業明細テーブルの作業内容に
hogehogeもしくはnullnullが含まない作業番号を抽出したいのか
どちらだろうか?
後者なら、前者でhogehogeもしくはnullnullを含む作業番号を抽出出来ているのだから、
その作業番号以外の作業番号を求めればいいのでは? >>889
後者です
論理演算的にNOT ORを使えばいいのでしょうか?
SELECT distinct 作業番号
FROM 作業テーブル,作業詳細テーブル,作業明細テーブル
WHERE
作業テーブル.ID = 作業詳細テーブル.作業ID AND
作業詳細テーブル.ID = 作業明細テーブル.作業詳細ID AND
NOT (作業明細テーブル.作業内容 LIKE '%hogehoge%' OR
作業明細テーブル.作業内容 LIKE '%nullnull%')
こんな感じですか? 速度考えなきゃ○○でいいんじゃね?
これ読んで速度考えたさいきょうの○○と思う>>879とか>>882の国語力 w >>891
> 後者です
>> 入ってない方は
>> SELECT 作業番号 FROM 作業テーブル
>> EXCEPT
>> SELECT 以下同文
>> でいいんじゃね? >>892
>速度考えなきゃ
で改行入ってるから、そこで文章が切れてると判断するかつながってると判断するか
その材料がないだろ、キミの国語力も怪しいw お前らまさか
件のsql見て処理速度分からないの?
じゃなきゃ文頭一行に
異様にこだわる理由はそれかよw >>893
できませんでした
質問する場所を変えるので取り下げます >じゃなきゃ
じゃも考慮しなくては
じゃを考えなくてもいいなら
どっちにも取れるw そりゃ悔しいだろうよw自分じゃ頭いいと思ってるんだからなw馬鹿すぎるwwww IPAの試験は半分国語の問題だからな。こういうのも意外と大事よ。 質問ですが
table点数
名前 年月日 点数
花道 2017/10/1 20
赤木 2017/10/1 80
三井 2017/10/1 20
花道 2017/10/5 10
赤木 2017/10/5 100
三井 2017/10/5 40
花道 2017/10/10 0
table成績
名前 評価 最終評価年月
花道 E 2017/9/1
赤木 A 2017/10/5
三井 C 2017/9/1
↑のようなテーブルがあったとして↓のビューを作成したい。
新規評価ビュー
ランキング 名前 テスト回数 平均点 評価
テスト回数は、table点数にある名前の回数で
対象データはtable点数の年月日が table成績の最終評価年月日に設定されている日以降
ランキングはテスト回数から番号を作成
平均点はtable点数の点数の平均
最終評価年月によってテスト回数をだすのがよくわからないのでだれかアドバイスお願いします。 >>904
> ランキングはテスト回数から番号を作成
テスト回数のランキングってこと?
ならこんな感じかな
create view View904 as (
select
rank() over (order by count(*) asc) as ランキング,
成績.名前 as 名前,
count(*) as テスト回数,
avg(点数.点数) as 平均点,
成績.評価 as 評価
from 成績
left join 点数 on 成績.名前 = 点数.名前
where 成績.最終評価年月 < 点数.年月日
group by 成績.名前, 成績.評価
)
group by と rank() は同時に使ったことないからもしかしてそこでエラーになるかも
その時はサブクエリにして改めて rank() を適用してちょ >>904
まずは、
・ランキング
・テスト回数
・平均点
・評価
を、自分でそれぞれ別のクエリで書いてみて、わからない奴だけ質問してくれ ↑のようなテーブルがあったとして↓のビューを作成したい。
新規評価ビュー
ランキング 名前 テスト回数 平均点 評価
↑この下に、どういう結果を期待しているのか、書いてみて ランキングってのは該当点数の平均点の順位で良いのか?
とりあえず書いてみた
with
tmpデータ as (
select 名前,AVG(点数) as 平均点,COUNT(名前) as テスト回数
from(
select * from table点数 t
where t.年月日 >= (select MAX(最終評価年月) from table成績 where 名前=t.名前)
) t2
group by 名前
)
select
(select COUNT(*)+1 from tmpデータ where 平均点>x.平均点) as ランキング,
table成績.名前,テスト回数,平均点,評価
from table成績
left join tmpデータ x on table成績.名前=x.名前
ウィンドウ関数とか使えばもうちょいきれいに書けるのかもしれんが
あれ苦手なんだよなぁ レスがいっぱい早めに帰ってよかった!
>>907
>>909
今回こんな感じの結果を求めていました。
ランキング 名前 テスト回数 平均点 評価
1 花道 3 10 E
2 三井 2 30 A
3 赤木 1 80 C
>>906
>>910
ありがとうございます。さっそく試してみます。 >>906 >>910
ありがとうございました。思ってたよな動きになりました。
追加で質問なのですがsqlserverだとして
>>906の書き方
>>910の書き方で
↓のようなのを作るのは問題ないですか?
>>904の
table点数に 身長等のカラムを300追加したtable
新規評価ビューと同じようなビューを30作る。
DBとしてはDB湘北、DB陵南、DB海南等を10作成↑の内容を各DBが持っているとして
DB湘北の
table点数に数秒に1件Insertされて数百万件のデータが作られていく
Insertされるごとに30のビューが更新されていくと思うのですが、これくらいならSQLserverで問題なく動くかな?
Insertは各DBの中のtable点数だけですが
10のDBのtable点数に同時にInsertは影響がでる?のかきになります >Insertされるごとに30のビューが更新されていく
普通のビューは実データもってないから、ビューが更新されるとかありません
あとは何したいかわからんけど、実機で性能評価してください
ちゃんとした設計のDBなら、数秒に1回の追加も数百万のselectも問題ないけど
まあ、俺なら一つのテーブルにカラム300とか、まずほんとに正しいか疑うけどな >>914
> ちゃんとした設計のDBなら、数秒に1回の追加も数百万のselectも問題ないけど
これは純粋にハードの性能の問題です嘘をつかないでください やりたいこととしては単純にビューの内容をGridやエクセル等に表示したいです。
30のビューを作るとしても
実機で性能評価する前に>>913ぐらいなら余裕でしょなのか、そもそも無茶なのか簡単な感触がほしいなと。
300カラムは名前、時間+5tableぐらいに分割できますが
一つのビューは1tablか2tableの情報なのでtableは分割したほうがいい?と思うのですが
insaret*5がどのくらい時間かかるかわからなかったのでinsaret*1の300カラムで聞いてみました。
やっぱり分割するべきですかね >>915
今どきのまともなハードなら
ってのを追加しとくわ
それなりのハードでもDB設計腐ってたら、その程度の処理でも大変なことになるけどな >>917
「大変なこと」とはなんですか?ぼやかさずに具体的に言えばいいでしょうに
前言撤回します
アナタ嘘はついてないですね
無知なだけのようです >>919
自分の間違いを指摘されると「煽られた」ってw
どんだけ自分に都合いいんだよ馬鹿だなw 参考までに効きたいんだが、
毎秒100万アクセスがあるようなシステムってどういうものなの? >>921
某夢の国関係の予約サイトで予約開始直後とかは数十万TPS行く >>920
間違いの指摘ってこれ?
> これは純粋にハードの性能の問題です嘘をつかないでください
インデックスとかパーティションも知らんとかバカ過ぎるだろ 他人をバカにしていないと自分の存在価値を確認できない人が多いのかな >>925
お前それ好きだよなあw
どんだけバカにされたんだよw >>926
いや他人をバカにして草生やしてる人を結構見かけるから
そういう人の心の中をちょっと想像したりして楽しんでるだけだよ >>928
まあそうかもね
否定はしないよ
ただそういう人見てるとそんなに自意識過剰にならずにもっと気楽に生きればいいのになぁって思う >>929
え?お前が気張ってるからそんな狂った趣味になんだぜ? >>931
大体さあ無知ってお前が思ってる程恥ずかしい事じゃないぜ
一つ教わればその分お前が一つ賢くなるんだから
もっとフラットに自分をさらけだせばいいのに >>932
いやなぜ俺がフラットにさらけ出してない前提なのかは疑問だが
あなたのいう通りだと思うよ >>933
え?お前自分の無知を指摘されると馬鹿にされたって思う側の人だろw
簡単に分かった気になるなよ
無知でいいんだよ少しずつ理解してけば >>934
いや違うけど…
バカにされようがされまいが、自分の価値には何ら影響を与えないので
なぜなら自分で自分のことダメだと思ってないから >>935
それを「気張ってる」って他人は言うんだけど… ちょっと語弊があったかも
正確にはバカにされていると認識することがないといった方がいいのかもしれない >>937
いや…それはそれで精神的に問題あるぞ…
何度も言うけど無知でいいんだよ
もっと素直になれば?w >>938
さっきから無知という言葉を連発しているけど、なにかコンプレックスがあるの? >>938
無知かどうかって質問に答えるとしたら何も知らない訳じゃないけど知らないことの方がずっと多いと思う
全知全能か?ってきかれたら明確に否定します >>940
そもそも誰もお前の事を全知全能だなんて思ってないからw
何を怖れてるんだお前はw >>941
何も恐れていないよ
>>938
精神的に問題があると思うならそうなのかな
人に何かを言われてバカにされてると思う=自分でも自分のことをバカにしてる
ってことだと思うけどどうなんだろうね >>942
つまりお前は無知でちっぽけな自分を怖れてるんだろ?
いやこれは疑問形だけど疑問ではない
そうなんだお前は
でもなあ…皆無知でちっぽけなんだぜ? >>925
明確な理由もなしに人を嘘つき呼ばわりしてたらバカにされてもしょうがなくね? >>946
ちょっと背景がわからないけど、嘘つき呼ばわりされてるのが自分なら、自分が嘘をついていないのなら特に気にする必要がないと思う
他人が嘘つき呼ばわりされてたとしたら、その真偽はさておき、それはその人の課題であって、第三者がそれに対して何か言うものでもないとは思う 人を嘘つき呼ばわりしてもいいと?
まあそう言う考え方もあるかもな
俺はそうは考えないだけだからいちいち絡んで来なくていいよ 嘘つき呼ばわりしてる人がいたとしても、それが事実でなければただの独り言ですからね >>948
お前が正しくない事を言っているのならば
お前の意思には関わらずお前は嘘をついている事になる
嘘つきとは厳然たる事実にすぎん 論理的(=客観的に検証可能)な正しさと主観的な正しさなのかによって話は変わってきますね 掲示板に書くのは独り言と言わない
チラシの裏にでも書いとけ >>951
主観的な正しさなどというものは存在しない
それはお前の願望にすぎん まだマウンティング完了できないのw
なさけなーーーw >>950
で、何を言いたいの?
当たり前のことを言って話をそらすとか低能がよくやる手じゃないと言うなら誰が嘘ついてるのかを根拠と共に書いてよ >>957
あなたがそう思うならあなたにとってはそうなんでしょうね >>956
当たり前のことを言って話をそらすとか低能がよくやる手じゃないと言ってないけど?w
お前は何を見てるんだ?気でも狂ったか?w >>961
そうかそれなら良かった
ところでお前が>>914なら言っておくが
俺はお前の事を嘘つきとは言ってないぞ
いや一度は言ったがw
前言撤回して正確に無知なだけだと認知しているからねw >>962
残念ながら私は>>914さんではありません… >>963
そうか違ったかwすまんなw
じゃあ誰なんだよ無駄に俺に絡んできてるやつw SQLは本当に初心者でして、MySQL+PHPで自分用のプライベートなファイルアップローダーを作ったことくらいしかないレベルです
でもデータベースは面白いしWeb技術としては必須なので少しずつ勉強しており、このスレも時々のぞいております >>964
絡んでしまったのは私なんですけど、あなたが想定してる人ではないようです
ごめんなさいね >>959
> 当たり前のことを言って話をそらすとか低能がよくやる手じゃないと言ってないけど?w
日本語の理解も怪しい奴だったのか w >>964
> じゃあ誰なんだよ無駄に俺に絡んできてるやつw
心の声:もっと俺に絡め! 質問ですが
sqlserverにDB1、DB2、〜DB10があり中にtableAとtableBがありカラムは同じだとします。
tableAにPC1とPC2から同時にinsert処理するとトランザクションが発生しますが
↓のパターンの処理の場合は問題はおこりますか?
問題ないならパターン2でいこうと思いますがパターン1がいいことってありますか?
パターン1
DB1.tableAにPC1からinsert処理、
DB2.tableAにPC2からinsert処理を同時にする
パターン2
DB1.tableAにPC1からinsert処理、
DB1.tableBにPC2からinsert処理を同時にする ありがとうございます。
パターン2で考えてみます。 Left Outer Jonって複数一気に出来ない?
方法がわからないので、
(サブクエリ(サブクエリ(サブクエリ)))でやってるんだけど。 >>973
できるよ。構文上は外部結合した結果と結合するんだから、結合条件次第。 >>975
単にオラクル構文に慣れているだけでしょ。 よろしくお願いします。
前任者が突然退職しました。
SQL初心者ですが業務を引く次ぐことになりました。
今、行き詰まってます。
次のようなテーブルが有ります。
table 出勤表(
社員番号 serial,
日付 date,
出勤時間 timestamp,
退勤時間 timestamp,
遅刻 boolean,
早退 boolean,
欠勤 boolean
)
ここである期間内の、例えば
where 日付 between '2017-05-01' and '2017-05-14'
内における社員それぞれの遅刻、早退、欠勤の【有無】を求めたいのです。
出力例)
社員番号 遅刻 早退 欠勤
10 F F T
11 F F F
12 T T F
のような。
色々試行錯誤していますが、まず、ある期間内に遅刻があったかどうか、というところからもう分かりません。
ヒントだけでもかまいません。
助けてください。
Postgresqlです。 Postgresqlってboolean型にMAXとかMINとかとったらどうなる?
たとえば指定期間内の遅刻のMAXかMINとれば行けると思うけど
だめならCASEでTRUEのとき1、それ以外は0にしてSUMなりMAXなり取ればいけるんじゃね >>977
SELECT 社員番号,
SUM(CASE WHEN 遅刻 THEN 1 ELSE 0 END) > 0 as 遅刻,
SUM(CASE WHEN 早退 THEN 1 ELSE 0 END) > 0 as 早退,
SUM(CASE WHEN 欠勤 THEN 1 ELSE 0 END) > 0 as 欠勤
FROM 出勤表
WHERE 日付 BETWEEN '2017-05-01' AND '2017-05-14'
GROUP BY 社員番号 スレ違いでしたら恐縮です。
アプリケーションサイズが一番小さい
データベースソフトウェアを教えてください。
何か記憶だと、インストール不要でちょっとづかいに使える様な
超ちいさい(アプリのサイズが)、データベースソフトがあった記憶があるのですが・・
宜しくお願いいたします。 テキストファイルで、文字列検索すれば?
タダだし、簡単だぞ >>980
SQLiteはPHP5以降デフォルトでバンドルされています >>982
ありがとうございます。SQLiteで間違いありません。 >>982
すみません。やっぱりSQLiteではありませんでした。 >>987
いや御一行様じゃなくて>>985てめぇに対して言ってんだよ >>988
その返事だよ
その怒りのゴールは設定できてる? >>990
メンゴメンゴ
不快な日曜になったねW >>977-979
素直にbool_or( )でいいと思うが >>992
977 です。
bool_or() っていう関数、知りませんでした。
これで全く問題なく上手くできました♪
ありがとうございました。
※自分で書いた977が自分の環境(BathyScaphe)で読めません(泣)。なぜ? Left Outer Joinを複数回やる場合、
↓これで良いらしいですが、
Select G, H
From
(C Left Outer Join D
On E = F) Left Outer Join I
On J = K
今まで知らずに↓こうやって書いてました。
Select G, H
From
(Select A, B
From C Left Outer Join D
On E = F) Left Outer Join I
On J = K
これだと遅い? このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 426日 15時間 16分 41秒 2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。