1/7〜8に成績レコードが無い投手名を出力するクエリ、どうすれば良いでしょうか?
テーブル【投手マスタ】:
投手ID , 投手名
E21 , 岩隈
G18 , 桑田
L18 , 松坂
テーブル【成績】:
投手ID , 日付 , 回 , 失点
L18 , 2005/01/04 , 2 , 3
G18 , 2005/01/06 , 2 , 2
L18 , 2005/01/07 , 3 , 0
L18 , 2005/01/09 , 6 , 0
クエリ【成績レコードの無い投手】:
SELECT 投手マスタ.投手ID, 投手マスタ.投手名
FROM 投手マスタ LEFT JOIN 成績 ON 投手マスタ.投手ID = 成績.投手ID
WHERE (((成績.投手ID) Is Null));
ダミーでスミマセン
まずは、これがどうなるかを確認してみてください。
SELECT 投手マスタ.投手ID, 投手マスタ.投手名
FROM 投手マスタ , 成績
WHERE (成績.投手ID Is Null);
次にこうしてみてください。
SELECT 投手マスタ.投手ID, 投手マスタ.投手名
FROM 投手マスタ , 成績
WHERE (成績.投手ID Is Null)
GROUP BY 投手マスタ.投手ID, 投手マスタ.投手名;
2回目スミマセン。
思いっきり勘違いしてました。スミマセン。
SELECT 投手ID, 投手
FROM 投手マスタ
WHERE NOT EXISTS(SELECT * FROM 成績 WHERE 日付 BETWEEN #2005/01/07# AND #2005/01/08#);
SELECT 投手ID, 投手名
結果は空レコード。
クエリ1本では不可能ということですかね?
SELECT 投手マスタ.投手ID, 投手マスタ.投手名, 成績.日付
FROM 投手マスタ LEFT JOIN 成績 ON 投手マスタ.投手ID = 成績.投手ID
WHERE (((成績.投手ID) Is Null) AND ((成績.日付)<#1/7/2005#)) OR (((成績.日付)>#1/8/2005#));
こうなりますね。
結果:
L18 松坂
です。
E21 岩隈
G18 桑田
と出てほしいのです。
http://www.hatena.ne.jp/1108642591#
人力検索はてな - Accessクエリ 100ポイント 1/7〜8に成績レコードが無い投手名を出力するクエリ、どうすれば良いでしょうか? テーブル【投手マスタ】: 投手ID , 投手名 E21 , 岩隈 G18 , 桑..
これではダメですか?
SELECT 投手マスタ.投手ID, 投手マスタ.投手名
FROM 成績 RIGHT JOIN 投手マスタ ON 成績.投手ID = 投手マスタ.投手ID
WHERE 投手マスタ.投手ID <> ANY (SELECT 投手ID FROM 成績 WHERE 日付 BETWEEN #2005/1/7# AND #2005/1/8#);
ダメです。松坂出ます。
http://www.hatena.ne.jp/1108642591#
人力検索はてな - Accessクエリ 100ポイント 1/7〜8に成績レコードが無い投手名を出力するクエリ、どうすれば良いでしょうか? テーブル【投手マスタ】: 投手ID , 投手名 E21 , 岩隈 G18 , 桑..
ダミーです。
http://www.hatena.ne.jp/1108642591#
人力検索はてな - Accessクエリ 100ポイント 1/7〜8に成績レコードが無い投手名を出力するクエリ、どうすれば良いでしょうか? テーブル【投手マスタ】: 投手ID , 投手名 E21 , 岩隈 G18 , 桑..
2の回答に追記いたします。
改善前SQL
SELECT 投手ID, 投手
FROM 投手マスタ
WHERE NOT EXISTS(SELECT * FROM 成績 WHERE 日付 BETWEEN #2005/01/07# AND #2005/01/08#);
↓
改善SQL
SELECT 投手ID, 投手
FROM 投手マスタ
WHERE NOT EXISTS(SELECT * FROM 成績 WHERE 日付 BETWEEN #2005/01/07# AND #2005/01/08# AND 投手マスタ.投手ID=成績.投手ID);
とした方がいいでしょう。
改善前SQLでは「投手マスタ」と「成績」のつながりがない状態となるので
「NOT EXISTS(SELECT .. #2005/01/08#)」という条件で必ず空レコードとなってしまいます。
DBは分かりますが、Accessでの日付の指定方法を知らないので
「2の回答」に追記する形となりました。
間違ってたらすいません m(_ _)m
素晴らしい!! 完璧です!! お見事でした!!!
http://www.friendlysw.com/knowhow/Queries_Expert_006.asp
Access Knowhow Queries - Expert 006
上の回答に足りない構文があるような気がしましたので
ちょっと
横槍です アクセスが手元にないんで
動作確認できませんがこうだったとおもます
まちがっていたら ポイントはいりませんので・・
SELECT 投手ID, 投手
FROM 投手マスタ
WHERE NOT EXISTS(SELECT *
FROM 成績
WHERE 投手マスタ.投手ID = 成績.投手ID
and 日付 BETWEEN #2005/01/07# AND #2005/01/08#);
パラメータ入力ダイアログ登場です(投手)
人力検索はてな - 質問一覧
これでいかがでしょうか?
SELECT * from 投手マスタ where 投手ID not in (select 投手ID from 成績 where 日付 between #2005/01/07# AND #2005/01/08#);
文句なし完璧です!!!
kn1967さん、わざわざポイント送信していただいてありがとうございました。#2惜しかったですね。
皆さんありがとうございました。
答え出ません。日付1/7〜8という条件はどこにもなくていいのでしょうか...???