nora1962 の回答履歴

全1179件中21~40件表示
  • 新人の頃皆さんどうやってSQL勉強しました?

    職場で沢山仕様書を読んで沢山のSQL文を作成するしか方法ないのでしょうか 私の職場はプログラムの修正が多いため新規に仕様書からSQL文を 考える機会が少なく、今あるSQL文に項目を追加するというパターンが おおいです。そのため、複雑な仕様のSQL文を経験する機会が少ないです。 しかも、仕様書を作らずメモ書きや口頭でのプログラム作成が多いため 仕様書がなかったり古かったりで既存のコードからのSQL文の勉強 が難しいです。 皆さんは新人時代どのようにSQL文をマスターしましたか? 独学方法等を教えてください

  • 縦を横にするSQLを教えてください

    以下縦長に延々とある出勤テーブルをシフトテーブルのようにまとめたいのですが 方法が分かりません。ご教授願います。 出勤テーブル 山田,月 佐藤,木 山田,水 鈴木,火 佐藤,金 ・・・ ・・・ シフトテーブル 名前,月,火,水,木,金,土,日 山田, 1, , 1, , , , 佐藤, , , , 1, 1, , 鈴木, , 1, , , , , ・・・ ・・・

    • ベストアンサー
    • noname#189001
    • SQL Server
    • 回答数2
  • 引数がROWTYPE型のストアドファンクション

    引数がROWTYPE型のファンクションを呼び出したいのですが、 SELECT TEST_FUNC(MY_TABLE.*) FROM MY_TABLE; で呼び出せないのでしょうか? (TEST_FUNCの引数はMY_TABLE%ROWTYPE型です) よろしくお願いします。

    • ベストアンサー
    • yasulu
    • Oracle
    • 回答数1
  • 日付を表示形式で戻すSQL文を書きたい

    2つの日付を与えてその2つの日付の間の日付を以下のような表形式で返すSQL文を作りたい。 可能でしょうか? 例えば、与える日付を以下の2つとして、 2012/01/05,2012/01/11 SQL文の実行結果は、 カラム名 2012/01/05 2012/01/06 2012/01/07 2012/01/08 2012/01/09 2012/01/10 2012/01/11 今回の例では、2012/01/05~2012/01/11までの7日間なので7件が返された。

  • db2にて複数列の副照会を行いたい

    db2にて複数列の副照会を行いたい 会員番号の中で直近の利用日の明細を取得したい 例) SELECT 会員番号,利用日,利用目的,使用器具 FROM 明細テーブル      WHERE (会員番号,利用日) = (SELECT 会員番号,MAX(利用日) FROM 明細テーブル GROUP BY 会員番号) どなたかヒントをお願いします

  • SQLで一行更新したい

     こんにちは。 今、SQLの勉強をしている初心者です。 データの1~30までの件数に、NUMBER1~30を入れたいのですがどうすればいいでしょうか? 例えば、       X     Y       NUMBER      GHU    KJI        0      HUG    EER       0      HUU    OPI        0 上記にあるNUMBERを下記のようにしたいです。       X     Y       NUMBER      GHU   KJI        1      HUG   EER        2      HUU   OPI        3 UPDATE文だと一列全部変わってしまいます。 どのような文を作ればいいのかよく分からないでいます。 よろしくお願いします。

  • T-SQL パラメータがNULLの場合条件含めず

    お世話になります。 SQL Server での T-SQLのWhere句のパラメータがNullであった場合に これをWhere句から除外したいのですが・・・ 今まで、こういう場合には、SQL文をプログラム上で作成してそのSQL文を ソースにしてきたのですが、動作速度や汎用性を考えてストアドプロシジャーを使用するのが今後の為と思いこちらで質問させていただきました。 例えば・・・条件のところから WHERE     IF @パラメータ1 Is Not Null         (dbo.TEST.A =< @パラメータ1) AND     IF @パラメータ2 Is Not Null         (dbo.TEST.B =< @パラメータ2) AND このように記述してみたのですが、WHEREが記述された後ではダメなようで・・・次に WHERE     CASE         WHEN @パラメータ1Is Not Null THEN (dbo.TEST.A = @パラメータ1) AND         WHEN @パラメータ2Is Not Null THEN (dbo.TEST.B = @パラメータ2) AND     END 上記にように記述してもやはりエラーが。 WHERE句の後にパラメータを評価し、WHERE句に含めるか、 含めないか記述するにはどうすればいいでしょうか? 初歩的な事かもしれませんが、何卒よろしくお願いいたします。

  • SQLiteのLike句で抽出できない

    SQLiteのLike句で抽出できないレコードがあります。 原因についてご教授いただけますでしょうか。 以下、操作手順になります。 ■データベースの作成 C:\>sqlite3.exe member.db SQLite version 3.7.15.2 2013-01-09 11:53:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" ■テーブルの作成、レコードの追加 sqlite> create table t_member(name text, age integer); sqlite> insert into t_member values('山田一郎', 25); sqlite> insert into t_member values('田中次郎', 35); sqlite> insert into t_member values('鈴木三郎', 45); ■検索 sqlite> select * from t_member where name like '%一郎'; 山田一郎|25 sqlite> select * from t_member where name like '%次郎'; 田中次郎|35 sqlite> select * from t_member where name like '%三郎'; sqlite> 三郎だけが検索条件に適合しないのは何故でしょうか。 よろしくお願いします。

  • SQLの結果でWindowsコマンドを実行

    毎度お世話になります。 SQL文の実行結果をもとにWindowsコマンドを実行したいのですが方法がわからず困っております。 ご存知の方がおられましたらご教示いただれば幸いです。 まず実行するSQLは select foldername列 from A表; foldernameは、複数行の結果が返ってきます。 この帰ってきた結果を元に、Winddowsのフォルダー(ディレクトリ)を削除するコマンド > rmdir c:\abc\foldername を発行して、c:\abcフォルダー配下にあるfoldernameと同じ名前のフォルダーを削除 することを考えています。foldernameは複数ありますので、ループ処理も必要です。 基本的な質問で恐縮ですが、何卒よろしくお願いします。

  • SQLクエリ1年前のデータを削除できない

    現在このクエリを作成したのですがデータが削除されなくて、データ全件が抽出されてしまいます。 以下の構文で試したのですが・・・・もし、ご指摘、アドバイス等ございましたらよろしくお願いします。 select * from テーブル名 delete from テーブル名 where 日付 < = (select DATEADD(year,(-1),(日付))) ちなみに、日付はDATETIMEです   バージョン:SQL management studio 10.50.25.000

  • SQL データのSELECT

    あるテーブルで |カラム1|カラム2|カラム3| ------------------------- |AAAAAAA|1111111|CCCCCC| |AAAAAAA|2222222|BBBBBBB| |AAAAAAA|3333333|DDDDDDD| あった場合、下記のように 2~3レコード目のカラム1の 値のみを空白で取得したい 場合、どうすればよいのでしょうか? |カラム1|カラム2|カラム3| ------------------------- |AAAAAAA|1111111|CCCCCCC| | |2222222|BBBBBBB| | |3333333|DDDDDDD|

  • ある値以上の空き番の最小値を取得するSQL

    テーブル TB の項目 CDがNUMBER型でユニークキーだとします。 このCDで ・ある値以上の空いている最小の番号を取得したい。 としたら1つのSQLで実現できますか? 例) CDの値が 6・・・・80 150・・・ (81から149は存在しない) という具合に存在していた場合に、101以上で空いている最小の番号 を取得したいのです。 この場合は101です。1が取得されても駄目、81が取得されても駄目です。 また、同じ条件でデータが 6・・・・150 200・・・ (151から199は存在しない) の場合には151が取得したいのです。 このような値を検出するSQLってわかりますか? 以上よろしくお願い致します。

  • 効率的なSQL文をご教授ください。

    MySQLの初級者です。 下記のようなテーブル構造があります。 article_flag ------------- -------------  aid    display ------------- -------------  1     1 ------------- -------------  2     1 ------------- -------------  3     1 ------------- -------------  4     2 ------------- ------------- ...Primary(aid)、INDEX(display) category ------------- -------------  cid    name ------------- -------------  1     カテゴリ1 ------------- -------------  2     カテゴリ2 ------------- -------------  3     カテゴリ3 ------------- -------------  4     カテゴリ4 ------------- ------------- ...Primary(cid)、INDEX(name) article_category ------------- -------------  aid    cid ------------- -------------  1     1 ------------- -------------  1     4 ------------- -------------  2     1 ------------- -------------  2     2 ------------- -------------  2     4 ------------- -------------  4     1 ------------- -------------  4     2 ------------- ------------- ...INDEX(cid aid) このような構造の中で、 下記のような出力を行いたいのです。 カテゴリ1 【関連記事 2件】 カテゴリ2 【関連記事 1件】 カテゴリ4 【関連記事 2件】 非表示中の記事(display = 2)は関連記事に上がらず、 関連記事の存在しないカテゴリは出力しないという仕様です。 この場合、どのようなSQL文で対処すればよろしいでしょうか? 現状では、 SELECT c.cid, c.name FROM category as c INNER JOIN article_category as ac ON c.cid = ac.cid INNER JOIN article_flag as af ON ac.aid = af.aid and af.display = '1' GROUP BY c.cid ORDER BY c.name ASC limit 10; というSQL文でまずは抽出してから、 抽出後のPHPのループ内で、 SELECT count(ac.cid) FROM article_category as ac INNER JOIN article_flag as af ON ac.aid = af.aid WHERE af.display = '1' and ac.cid = '{取得したcid}'; とカウントして関連記事数を出すという 回りくどいやり方しか思いついていません。 また例では件数が少ないですが、 実際には、article_flagが500件、categoryが200件あり、 一つの記事に平均で10個近いカテゴリが割り当てられているため、 article_categoryの件数は5000件近くあります。 そのため、最初のSQLクエリがとても遅く、 早くても10秒くらいかかります。 基本的にはlimit 10で10件限定の表示のため、 2番目のクエリは特に重さを感じません。 1つ目のクエリで一度に関連記事数まで取得できれば最善ですが、 難しい場合には、1つ目のクエリでは、 関連記事が存在するかどうかの判定だけでも良いので、 何とか良い方法をご教授の程お願いいたします。

    • ベストアンサー
    • kayakiss
    • MySQL
    • 回答数3
  • 【バグ?】ORDER BY DESCでempty

    MySQLを使っていて、下記条件で結果がemptyになります。 どうすれば正常に取得できるようになるでしょうか。 SELECT `hoge`, `fuga`, `piyo` FROM `table` WHERE `moge` = 'moge' ORDER BY `fuga` DESC LIMIT 0, 5 ・`moge`と`piyo`にはインデックスが貼られています。 ・DESCを消すと正常に取得できます。 ・WHERE句を消すと正常に取得できます。 ・LIMITの数値を大きくすると正常に取得できます。('moge'によってどれくらい大きくすればいいかの数値は違う) ・LIMITのoffsetを1以上にすると正常に取得できます。 1ヶ月ほどはちゃんと動作していたのですが、`fuga`をUPDATEしたタイミングからこのような現象となりました。 環境 ・Ubuntu 12.04.1 LTS ・MySQL 5.5.28 ・エンジン mroonga ・groongaのバージョン2.0.9 足りない情報があれば補足致します。 宜しくお願い致します。

  • 【バグ?】ORDER BY DESCでempty

    MySQLを使っていて、下記条件で結果がemptyになります。 どうすれば正常に取得できるようになるでしょうか。 SELECT `hoge`, `fuga`, `piyo` FROM `table` WHERE `moge` = 'moge' ORDER BY `fuga` DESC LIMIT 0, 5 ・`moge`と`piyo`にはインデックスが貼られています。 ・DESCを消すと正常に取得できます。 ・WHERE句を消すと正常に取得できます。 ・LIMITの数値を大きくすると正常に取得できます。('moge'によってどれくらい大きくすればいいかの数値は違う) ・LIMITのoffsetを1以上にすると正常に取得できます。 1ヶ月ほどはちゃんと動作していたのですが、`fuga`をUPDATEしたタイミングからこのような現象となりました。 環境 ・Ubuntu 12.04.1 LTS ・MySQL 5.5.28 ・エンジン mroonga ・groongaのバージョン2.0.9 足りない情報があれば補足致します。 宜しくお願い致します。

  • Mysql 誕生日順に並べたい

    社員の生年月日から、今日から、1ヶ月間の誕生日対象者を、誕生日順に出力したいです。 SELECT memname, REPLACE(membirth, "-", "/") as mbirth, REPLACE(RIGHT(membirth, 5), "-", "") as cdate, DATE_FORMAT(membirth, "%c月%e日") as birday FROM MEMDB ORDER BY cdate membirthは、生年月日(例1989-01-01) cdate順にsortしたら、12月の人より、1月の人が先に出ます。 12月の人の次に1月の人が出るようにしたいですが。。。 あと、 検索条件も WHERE RIGHT(CURDATE(),5)=RIGHT(mbirth,5) OR RIGHT(DATE_ADD(CURDATE(), INTERVAL 1 DAY),5)=RIGHT(mbirth,5) OR RIGHT(DATE_ADD(CURDATE(), INTERVAL 2 DAY),5)=RIGHT(mbirth,5) OR ... みたいに、INTERVAL 30 DAYまででチェックしてますが、 正しい方法があれば、お教えてください。

  • DBが複雑すぎる

    下記画像の社員出身マスタのようなDBがあるとします。 会社だとこれが非常に複雑になり、さらに専門家に結合してもらわないと誰も分かりません。大変な労力です。これが大型DBになると数百のコードマスタとなり、コードマスタとマスタの突合せはともあれ、コードマスタ同士の突合せもあり、重複や入力ミスや勘違いが多発しています。 「山田,青森,青森」と言った感じでは駄目でしょうか。 どうせプログラムで入力チェックしていますし、ラジオボタンで選択する等、入力ミスが起こるはずがありません。いざとなればそこにパキスタンと手入力しても問題なさそうですし、大掛かりなシステム改編作業が減ると思いますが。 何のためにどこの会社もこういう複雑な設計になっているのでしょうか。

  • mysqlで日付が比較できない・・・

    はじめまして 皆様の知恵を貸してください mysqlでの質問なのですが、 簡潔にいうと日付が比較できません。 どういうことをしたいのかというとsqlからwhere文で今の日付より大きいもデータを抽出するということです データベースの構造は id int型 endtime datetime型 で構成されています endtimeには既にいくつかのdatetime型の値が入っています 例えば 2012-12-14 09:18:00 のように入っています でGETDATE()関数を使って今現在の時刻より未来のものだけ抽出するために convert関数を使って一度varchar型に変換することで比較しようとしました 色々インターネットで調べた結果次のような文なのではないかと考えました select id,endtime from [データベース名] where CONVERT(VARCHAR,endtime,121)>=CONVERT(VARCHAR,getdate(),121); しかし実行ができません 比較する方法を教えて欲しいです

    • ベストアンサー
    • angesin
    • MySQL
    • 回答数2
  • MySQLデータベースリカバリ文字コード指定

    Windows環境でのMySQLのデータベースバックアップで、以下のように文字コードを指定してバックアップが行われています。 mysqldump -uユーザ名 -pパスワード --default-character-set=sjis データベース名 > ****.sql バックアップからリストアするのですが、同じサーバ上で既存の同じデータベース(名)があるので 一度DROP DATABASE データベース名;してからCREATE DATABASE データベース名;を行うつもりです。 以下の2点について教えてください。 (1)create databaseする際に文字コードを指定する必要がありますでしょうか? create database データベース名 CHARACTER SET sjis; (2)リストア実行時に文字コードを指定する必要がありますでしょうか? mysqldump -uユーザ名 -pパスワード --default-character-set=sjis データベース名 < ****.sql 因みに ※my.iniには文字コードの指定で、sjis指定の表記がありました。 ※Moveble TypeでMySQLをデータベースとして使用しています。  よろしくお願いします。

  • MySQL マルチカラムインデックスでの範囲検索

    InnoDBでマルチカラムインデックスをもつテーブルに対して、1つ目のキーに範囲検索を行った場合、2つ目のキーはどんな場合も使われないのでしょうか? ■前提 ・テーブル名  tbl ・カラム  kaypert1(DATETIME) ,keypart2(INTEGER) ・インデックス  kaypert1,keypart2 このテーブルに対し、  SELECT * FROM bl WHERE keypart1 < '2009-03-31 20:00:00' AND keypart2 = 3; とした場合。 自分のイメージとしては、この検索でB-Treeの形としてkeypart1であてはまったデータそれぞれの下のTree(keypart2)を見に行くのかなと思っていました。 ただ、「LinuxDBシステム構築運用入門」という本を見ると、マルチカラムインデックスをもつテーブルに対して、1つ目のキーに範囲検索を行った場合は2つ目以降のキーは全く使われないと書いてあったので確認をしたいです。