Accessクエリ 100ポイント

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));

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答8件)

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ダミーでスミマセン

まずは、これがどうなるかを確認してみてください。

SELECT 投手マスタ.投手ID, 投手マスタ.投手名

FROM 投手マスタ , 成績

WHERE (成績.投手ID Is Null);

次にこうしてみてください。

SELECT 投手マスタ.投手ID, 投手マスタ.投手名

FROM 投手マスタ , 成績

WHERE (成績.投手ID Is Null)

GROUP BY 投手マスタ.投手ID, 投手マスタ.投手名;

id:radio3

答え出ません。日付1/7〜8という条件はどこにもなくていいのでしょうか...???

2005/02/17 21:55:47
id:kn1967 No.2

回答回数2915ベストアンサー獲得回数301

ポイント20pt

2回目スミマセン。

思いっきり勘違いしてました。スミマセン。

SELECT 投手ID, 投手

FROM 投手マスタ

WHERE NOT EXISTS(SELECT * FROM 成績 WHERE 日付 BETWEEN #2005/01/07# AND #2005/01/08#);

id:radio3

SELECT 投手ID, 投手名

結果は空レコード。

クエリ1本では不可能ということですかね?

2005/02/17 22:04:05
id:taknt No.3

回答回数13539ベストアンサー獲得回数1198

SELECT 投手マスタ.投手ID, 投手マスタ.投手名, 成績.日付

FROM 投手マスタ LEFT JOIN 成績 ON 投手マスタ.投手ID = 成績.投手ID

WHERE (((成績.投手ID) Is Null) AND ((成績.日付)<#1/7/2005#)) OR (((成績.日付)>#1/8/2005#));

こうなりますね。

id:radio3

結果:

L18 松坂

です。

E21 岩隈

G18 桑田

と出てほしいのです。

2005/02/18 10:36:02
id:peekaboo No.4

回答回数17ベストアンサー獲得回数0

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#);

id:radio3

ダメです。松坂出ます。

2005/02/18 10:37:58
id:oh_tsu No.5

回答回数48ベストアンサー獲得回数0

ポイント100pt

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

id:radio3

素晴らしい!! 完璧です!! お見事でした!!!

2005/02/18 10:44:34
id:pgs_m No.6

回答回数7ベストアンサー獲得回数0

上の回答に足りない構文があるような気がしましたので

ちょっと

横槍です アクセスが手元にないんで

動作確認できませんがこうだったとおもます

まちがっていたら ポイントはいりませんので・・

SELECT 投手ID, 投手

FROM 投手マスタ

WHERE NOT EXISTS(SELECT *

FROM 成績

WHERE 投手マスタ.投手ID = 成績.投手ID

and 日付 BETWEEN #2005/01/07# AND #2005/01/08#);

id:radio3

パラメータ入力ダイアログ登場です(投手)

2005/02/18 10:46:47
id:pgs_m No.7

回答回数7ベストアンサー獲得回数0

ポイント10pt

ちなみにこのページをみるとわかるかかも

id:radio3

ありがとうございます(^_^)

2005/02/18 10:48:08
id:akunin No.8

回答回数33ベストアンサー獲得回数2

ポイント100pt

http://www.hatena.ne.jp/list

人力検索はてな - 質問一覧

これでいかがでしょうか?

SELECT * from 投手マスタ where 投手ID not in (select 投手ID from 成績 where 日付 between #2005/01/07# AND #2005/01/08#);

id:radio3

文句なし完璧です!!!

kn1967さん、わざわざポイント送信していただいてありがとうございました。#2惜しかったですね。

皆さんありがとうございました。

2005/02/18 10:52:25
  • id:kn1967
    惜しいとか、惜しくないではなく、、、

    おちついて見れば間違いようも無いことだったのですが、、、何度も間抜けな回答をしたのが恥かしいです。

    ポイントを送付させていただいたのは、せめて開示ポイント分くらいはお返ししようという事と、何とか回答を送る手段は無いかとの点からです。
    #5でフォローいただいたので、ご覧になったのはそちらのほうが早かったかもしれませんが、私の回答はお手もとに正常に届きましたでしょうか。お手すきの際にでも、いわしにてお返事いただければ幸いです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません