毎度お世話になります。
下記2つのテーブルからテーブル結合をして表示させたいのですが、その前にサブテーブルにある時間データの中で最新のものだけと結合したいと考えています。色々試したのですがうまくいきません。どなたかご教授の程よろしくお願いいたします。
main_tbl
| id | basyo | name |
---------------------
| 1 | 1 | aa |
| 2 | 1 | bb |
| 3 | 2 | cc |
| 4 | 3 | dd |
sub_tbl
| id | jyotai | time |
------------------------
| 1 | 1 |12:25:30|
| 1 | 2 |13:15:12|
| 2 | 1 |13:20:14|
| 1 | 3 |13:50:08|
欲しい結果
| id | basyo | name | jyotai | time |
---------------------------------------
| 1 | 1 | aa | 3 |13:50:08|
| 2 | 1 | bb | 1 |13:15:12|
| 3 | 2 | cc | null | null |
| 4 | 3 | dd | null | null |
考えた構文
$sql = "SELECT main_tbl.id, main_tbl.basyo, main_tbl.name, sub_tbl.jyotai, sub_tbl.time FROM main_tbl LEFT OUTER JOIN (SELECT MAX(time) FROM sub_tbl GROUP BY id) ON main_tbl.id = sub_tbl.id";
または
$sql = "SELECT main_tbl.id, main_tbl.basyo, main_tbl.name, sub_tbl.jyotai, sub_tbl.time FROM main_tbl LEFT OUTER JOIN sub_tbl on main_tbl.id = sub_tbl.id WHERE SELECT MAX(time) FROM sub_tbl GROUP BY id";
または
$sql1 = "SELECT MAX(time) FROM sub_tbl GROUP BY id";
$rs1 = mysql_db_query($db,$sql1) or die("sql Error!");
$sql = "SELECT main_tbl.id, main_tbl.basyo,main_tbl.name, $rs1.jyotai, $rs1.time FROM main_tbl LEFT OUTER JOIN $rs1 ON main_tbl.id = $rs1.id";
~以下クエリの実行と表示文~
どれも駄目でした。(クエリエラー表示)
因みに結合のみとMAX関数を別々に実行すると表示できることを確認しています。
環境は
WinXP
Mysql5.0.41
php5.2.3
です。
まだまだ勉強中ですのでよろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
もう少しすっきりした文になるかも知れませんが、とりあえず以下のSQL文でどうでしょう。
select
m.id, m.basyo, m.name, y.jyotai, y.time
from
main_tbl m
left join ( select
s.id, s.jyotai, s.time
from
sub_tbl s,
( select
id, max(time) maxtime
from
sub_tbl
group by id) x
where s.id = x.id and s.time = x.maxtime) y
on m.id = y.id
■考え方
1.sub_tblから、id毎に最大時間のデータを抽出したテーブルを作成し、xとする。
select id, max(time) maxtime from sub_tbl group by id
2.xとsub_tblを等価結合することでsub_tblからid毎に最大時間を持つ行を抽出したテーブルを作成し、yとする。
select s.id, s.jyotai, s.time from sub_tbl s , x where s.id = x.id and s.time = x.maxtime
※この手順は、最大時間を持つ行のjyotaiを取得するため。
3.main_tblとyを外部結合する。
select m.id, m.basyo, m.name, y.jyotai, y.time from main_tbl m left join y on m.id = y.id
早速のアドバイスありがとうございます。
x,yに代入するという概念が自分の頭の中にありませんでした。
非常に丁寧な解説で初心者の私でも理解できました。
参考にさせて頂きます。また困った時はご指導よろしくお願いいたします。
No.2
- 回答日時:
こんなんでどうです?
SELECT main_tbl.id, basyo,name,jyotai,time
FROM main_tbl
LEFT JOIN (
SELECT id,jyotai,time
FROM sub_tbl
WHERE (id,time) IN (SELECT id,max(time) from sub_tbl group by id)
) as x
ON x.id=main_tbl.id
アドバイスありがとうございます。
一発で表示できました。
非常に洗練された構文ですね。
まだまだ勉強不足だと痛感しました。
また機会がありましたらご指導の程よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このマクロの説明文を教えてほしいです。 1 2023/01/12 09:17
- Visual Basic(VBA) フォーム上のリストボックスに重複して表示しています 3 2022/10/19 11:55
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
- Visual Basic(VBA) VBAコードで質問があります 2 2022/10/20 15:27
- Visual Basic(VBA) VBAチェックボックスで有効無効切り替えできるように 5 2022/10/21 16:13
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- PHP PHPSpreadsheetを使って関数を繰り返し埋め込みたい 1 2023/05/24 11:33
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
とっておきの「まかない飯」を教えて下さい!
飲食店で働く方だけが食べられる、とっておきの「まかない飯」。 働いてらっしゃる方がSNSなどにアップしているのを見ると、表のメニューには出てこない秘密感もあって、「食べたい!!」と毎回思ってしまいます。
-
2つのテーブルを結合して最大値を取得したい
SQL Server
-
GROUP BYを行った後に結合したい。
Oracle
-
MAX値を条件にデータを取得するには?
SQL Server
-
-
4
複数テーブルのMAX値の行データを取得したい
Oracle
-
5
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
6
SQL Left Join で重複を排除するには
SQL Server
-
7
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
8
INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい
その他(データベース)
-
9
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
10
カーソル0件の時にエラーを発生させる
Oracle
-
11
<SQL>重複しているデータの場合は最新の日時のものを取得したい
SQL Server
-
12
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
13
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
14
CASE文のエラーについて
Oracle
-
15
Oracleでの文字列連結サイズの上限
Oracle
-
16
SQL、2つのテーブルで条件一致したものだけdeleteする方法は?
Oracle
-
17
ストアドプロシジャからストアドプロシジャを呼ぶには?
Oracle
-
18
単一グループのグループ関数ではありません。
Oracle
-
19
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
20
SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
読み込んだQRコードをフォーム...
-
onclickとonmouseoverを同時に...
-
CSSのID名に配列を使えませんか?
-
jqueryを使って無駄なspanタグ...
-
アンケートサイトを作りたい!...
-
背景色を透明化
-
ダブルクォーテーションが消え...
-
Javascriptで可変のHTMLのID名...
-
getElementByIdの戻り値がnull...
-
IFRAMEの表示/非表示を切り替え...
-
自働生成される<div>タグに連番...
-
[急ぎ] videoタグで埋め込んだm...
-
バッチファイルでカウントアッ...
-
複数画像のランダム複数表示(...
-
透過pngの透明部分以外をクリッ...
-
Flickity で画像にリンクを貼る...
-
html内かscript内で画像出力。...
-
デフォルト非表示にしたい。【t...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
iframe内のリンクが飛ばないの...
-
javascriptテキストBOX色を元に...
-
createElementで作成した要素を...
-
背景色を透明化
-
IFRAMEの表示/非表示を切り替え...
-
console.log結果をhtmlで表示し...
-
removeEventListenerについて
-
表示・非表示のスクリプトで、...
-
読み込んだQRコードをフォーム...
-
jQueryでクリックされた要素のi...
-
removeAttribute()メソッドで削...
-
テキストエリア内の一部の文字...
-
jQueryのアコーディオンメニュ...
-
javascriptでpostした値が取得...
-
テキストボックスに入力された...
-
jQueryでシンプルドラッグドロ...
-
jQueryで同じid属性が複数あっ...
-
自働生成される<div>タグに連番...
-
ページ遷移後のcssプロパティ保持
おすすめ情報