データベース初心者です。よろしくお願いいたします。
今、次のようなデータ構造を考えています。
テーブル1
データ番号(列1) データ名(列2)
(行1) 0 温度
(行2) 1 湿度
(行3) 2 水位
テーブル2
時刻(列1) データ0(列2) データ1(列3) データ3(列4)
(行1) 10:00 27 37 50
(行2) 11:00 28 36 40
(行3) 12:00 29 36 35
(行4) 13:00 31 35 32
ここで、12:00の湿度データを参照したいとき、
まず、テーブル1から湿度のデータ番号を参照し、さらに、テーブル2から
データ1の数値を取り出したいと思っています。つまり、2段階でデータを
取り出したいと思っているわけです。
例えば、12:00の湿度データは36ですが、これを1行のselect文で
書く方法がありますでしょうか?
ちなみに、使おうとしているのはMySQLです。
補足が必要であればご指摘下さい。補足いたします。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
つまり、
時刻 データ名称 データ
(行1)12:00 湿度 36
というような結果が返ってくる風にしたいのですね?
この目的だとテーブル構造の方が適してないと思うな。個人的には。テーブル2の方をこう変えたい。
テーブル2’
時刻 データ番号 データ
(行1)10:00 0 27
(行2)10:00 1 37
(行3)10:00 2 50
・
・
・
(行n)12:00 1 36
・
・
・
(行z)13:00 2 32
この構造だと、
select 2'.時刻, 1.データ名称, 2'.データ from 1, 2' where 1.データ番号=2'.データ番号 and 2'.時刻=12:00
と一発だ。どうしてもあれなら、
select 2.時刻, 1.データ名称, 2.データ1 from 1, 2 where 1.データ番号=1 and 2.時刻=12:00
とすれば出てくるかも知れない(未検証)が、select句の中を動的に作成しなければならないなど、DBシステムとして保守しづらそう・・・・。
さっそくのご回答、ありがとうございます。
はじめはご指摘のような構造を考えたのですが、実は、本当のデータは、テーブル2の列に相当するデータ種別がかなり多く、すべてのデータに時刻が付くとなると、何だかえらく無駄が多いような気がして、何かいい方法があるのではないかと思い、質問した次第です。
ご指摘にあった「DBシステムとして保守しづらそう」というのはもっともだと思いました。保守のことは考えていませんでした。もう一度、考えてみたいと思います。ありがとうございました。
No.3
- 回答日時:
> すべてのデータに時刻が付くとなると、何だかえらく無駄が多いような気がして
でしたら、「記録時間」テーブルのようなものを用意して、テーブル2(データテーブル)ではそのIDを記録する形にするというのはいかがでしょうか?
(更新処理がちょっと面倒になりますが)
No.2
- 回答日時:
「データ構造が不自然」は#1の回答と同様、第一感です。
たとえば
テーブル
時刻 温度 湿度 水位
(行1) 10:00 27 37 50
(行2) 11:00 28 36 40
(行3) 12:00 29 36 35
(行4) 13:00 31 35 32
では拙いのでしょうか。あるいはデータ種別が多く、一回の観測でその一部しか観測しないのであれば
1.観測種別マスタ
2.観測記録(観測日時、観測者、etc.)
3.観測値(観測種別ID、観測記録ID、値)
のようなテーブル構造にするとか。
データの種別や観測システムに関する補足説明が欲しいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL 列が存在しないと言われる 2 2023/02/10 18:33
- Excel(エクセル) Power Query でのデータの一括修正について 2 2022/05/10 02:00
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Oracle 参照関係のフィールドについて 1 2023/05/27 17:49
- Visual Basic(VBA) VBAで大量データの処理 3 2022/11/15 21:53
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Excel(エクセル) Excel 指定した固有番号で、複数の行を削除する方法は? 2 2022/03/30 15:18
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
Oracleで上書きImportはできま...
-
Accessでデータシートに同じデ...
-
ビューのソートについて
-
PostgreSQL MySQL CSV入出力
-
Access VBAからエクセルに出力...
-
ERROR1062:Duplicate entry.......
-
このISAMでは、リンクテーブル・・
-
left joinなどで結合対象のレコ...
-
マテリアライズドビューとスナ...
-
分単位でログ集計するためカウ...
-
accessでレコード更新直後の反...
-
ACCESS2000でのリンクテーブル...
-
MySQLのDB内容をWEB上に表示す...
-
SQLを使ったデータの作成
-
MySQLにデータをインポートでき...
-
以下の条件でデータベースのテ...
-
SQLのビューとカーソルの違い
-
削除したテーブルを元に戻すこ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Oracleで上書きImportはできま...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
ビューのソートについて
-
アクセス レコードセットを更...
-
マテリアライズドビューとスナ...
-
このISAMでは、リンクテーブル・・
-
同一テーブルのデータを参照し...
-
accessでレコード更新直後の反...
-
構文エラー : 演算子がありませ...
-
Access VBAからエクセルに出力...
-
仕事のミス:本番データの削除→...
-
結合テーブルでINSERTする方法...
-
削除したテーブルを元に戻すこ...
-
ORA-01401が表示され、データが...
-
CONNECT BYに関して
-
処理の途中で停止させ、再開さ...
-
IF NOT EXISTを使用するINSERT文
-
Accessの処理速度を速めるため...
おすすめ情報