• ベストアンサー

Accessでの検索で

和歌分類が恋で、和歌の上の句または下の句に恋の文字を含む和歌の作者名、和歌(上の句)、和歌(下の句)および和歌分類を求めよ。また、恋の和歌で恋の文字を含まない和歌を求める場合のSQLの変更点を示せ。 と言う課題をやっているのですが  SELECT 和歌情報.和歌分類, 和歌情報.和歌(上の句), 和歌情報.和歌(下の句), 作者情報.作者名 FROM 作者情報 INNER JOIN 和歌情報 ON 作者情報.作者番号=和歌情報.作者番号 WHERE (((和歌情報.和歌分類)="恋") AND ((和歌情報.和歌(上の句)) Like "*恋*")) OR (((和歌情報.和歌分類)="恋") AND ((和歌情報.和歌(下の句)) Like "*恋*")); と前述の問題はわかるのですが 恋の文字を含まない和歌を求める方のがわかりません。。。 不確定なのであればNULLをいれるじゃないですか わざと特定のものを検索条件から外すにはどうすればいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#21550
noname#21550
回答No.3

Like文の否定形は、  XXX Not Like "*恋*" となりますので、  (和歌分類="恋") AND ((和歌(上の句)) Like "*恋*")   ⇒ (和歌分類="恋") AND ((和歌(上の句)) Not Like "*恋*") なります。 ※分類が恋で”恋”と言う文字を含まない なお、  (和歌分類="恋") AND ((和歌(上の句)) Like "*恋*") 以外としたい場合は、Not(xxx) ですべてをくくります Not ( (和歌分類="恋") AND ((和歌(上の句)) Like "*恋*") ) となります。 ※分類が恋で”恋”と言う文字を含むもの以外すべて

Robin5959
質問者

お礼

細かくありがとうございます

その他の回答 (3)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

条件を WHERE (((和歌情報.和歌分類)="恋") AND ((和歌情報.和歌(上の句)) Not Like "*恋*")) OR (((和歌情報.和歌分類)="恋") AND ((和歌情報.和歌(下の句)) Not Like "*恋*")); にすれば抽出できます。 一致しない除外値Notを使います。 なので Not Like "*恋*" または Not Like "%恋%" で恋を含まないレコードを抽出できます。

Robin5959
質問者

お礼

細かくありがとうございます

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

SQL処理系によっては (1)Contains句 (2)Like %XXX% 両方あるようです。 たとえばhttp://www.okisoft.co.jp/esc/ora.html の「手順4について} 前置の Not で否定できたように思いますが.

Robin5959
質問者

お礼

ありがとう ございます  解決しました

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

和歌(下の句) Not Like "*恋*" でよろしいのでは?

Robin5959
質問者

お礼

ありがとうございます 助かりました

関連するQ&A

  • エクセルの機能で百人一首ゲームをしたいのです

    こんにちは。 エクセルの関数を使って百人一首のゲームを考えていますが、次のような状況です。 1)第1列を歌番号、2・3・4列に上中下の句、第五列に作者で、縦100行の表を作り、これに元表という 名前を付けました。 2)検索値のセルをA1にこの元表の外に作りました。 3)検索値は「=INT(RAND()*100)で求め、歌番号と合致するものを選ぶようにしました。 4)第2列の上の句を表示するためのセルには  「=VLOOKUP(検索値セル番号,元表の名前,上の句列番号) としました。 これで上中下の句とも所定のセルに入りましたが、ひとつの和歌を表示するとき、上中下句が一時に 表示されてしまい、暗記勉強になりません。 また、乱数のところは1首ごとに全部消去しなければなりません。 なにか、インプットで上中下句を別々に表示すること、次の歌へ進む乱数を自動的に作る方法を 教えていただきたいのです。VBAはよくわからないのでできればエクセルの範囲でお願いします。

  • 古歌の下の句・・・・

    実は古い和歌の文句がわからないのです。 作者は順徳天皇で、下の句は 「昨日も今日も過ごすころかな」 ・・・・だったと思います。 下の句の文句も厳密ではないかも知れませんし、 間違いはないと思いますが作者も違うかも・・・・ ほんとうにいい加減な情報で申し訳ありませんが、 心当たりのある方はお返事お待ちしています。 よろしくお願いします。

  • Access2007 フォームでのOR検索

    Access歴は2カ月程度です。 クエリから作成したフォームの中でのOR検索を行いたいのですが フィールド名・・・工具名,使用番号 検索に使用する非連結txtbox・・・工具名条件,使用条件 となっており、 Private Sub 検索_Click() If [工具名条件] <> "" Then 検索文字 = 検索文字 & " and 工具名 like '*" & [工具名条件] & "*'" If [使用条件] <> "" Then 検索文字 = 検索文字 & " and 使用番号 like '*" & [使用条件] & "*'" If 検索文字 = "" Then Me.FilterOn = False Else Me.Filter = Mid(検索文字, 6, 2000) Me.FilterOn = True DoCmd.Requery End If End Sub となっており、工具名と使用番号のAND検索は出来ているのですが、使用番号が1~6あり、 OR検索を使用して2つを検索条件にし、それぞれ該当している結果を表示させたいのですが。。。 工具名はカタカナや漢字のみです。 使用番号は「1,2,3」等と入力してあります。 クエリの抽出条件は無記入です。 どうぞ、よろしくお願いします。

  • ACCESSの検索について

    Access2002を使用しております。 個人情報 1.住所 2.名前 3.年齢 4.電話番号 上記の情報の項目にすべてあいまい検索(Like"*"&文字&"*")でそれぞれの項目に設定したのですが、3の年齢に何も入力していない個人情報に対してはあいまい検索でヒットしません。なぜですか?すべての項目に何か文字を入力しておかないとあいまい検索の対象にならないのでしょうか?

  • ACCESS2007あいまい検索について

    いつもお世話になっております。ACCESS2007において、システムを作成しています。元になるデータから情報を抽出して、表示するということなのですがうまくいきません。 検索メニューは下記のとおりです。 <検索メニュー> _________________ |社名:[会社名a] ← AAA、AAA株式会社 ←空白でも構わない。 |内容:[業務内容a] ←電気、水道 ←空白でも構わない。 |住所1:[住所a] ←空白でも構わない。 |住所2:[住所b] ←空白でも構わない。 |           [検索] [入力クリア]  |__________________ どれか、ひとつ情報を入力するようにする。 どこに入力をしても、データを抽出できるようにしたいです。下記は元データのフィールドです。 [ID][呼称][社名][郵便番号][住所][電話番号][郵便番号][住所2][電話番号][内容] 一つの情報さえ入力されれば、抽出されフォームに表示する。選択クエリに下記のような条件式を入れてあります。あいまい検索がうまくいかず、データの1件目しか表示されません。 Like "*" & [Forms]![会社情報検索メニュー]![会社名a] & "*" Like "*" & [Forms]![会社情報検索メニュー]![業務内容a] & "*" Like "*" & [Forms]![会社情報検索メニュー]![住所a] & "*" Like "*" & [Forms]![会社情報検索メニュー]![住所b] & "*" お分かりになる方、どうかご教授ください。お忙しいとは思いますが、どうぞよろしくお願いいたします。

  • 関連テーブルの検索方法

    以下のテーブル関連で、以下のロジックで、recipe_id だけの一覧を取得するのは、1本のSQLではどのようにすればよいでしょうか? #あとこのような、クエリーの事をなんと呼べばいいのでしょうか…。 #適切質問タイトルが思い浮かばなかったので、提示してもらえるとありがたいです。 recipe recipe_id | name 1 | ズッキーニとオリーブのトマトパスタ 2 | ズッキーニとオリーブのトマトのマリネ 3 | ズッキーニのアリオリ 4 | 野菜のフリッター recipe_ingredients recipe_ingredient_id | recipe_id | master_id 1 | 1 | 1 | ※ ズッキーニとオリーブのトマトパスタ 2 | 1 | 2 | ※ ズッキーニとオリーブのトマトパスタ 3 | 1 | 3 | ※ ズッキーニとオリーブのトマトパスタ 4 | 1 | 4 | ※ ズッキーニとオリーブのトマトパスタ 5 | 2 | 1 | ※ ズッキーニとオリーブのトマトのマリネ 6 | 2 | 2 | ※ ズッキーニとオリーブのトマトのマリネ 7 | 2 | 3 | ※ ズッキーニとオリーブのトマトのマリネ 8 | 3 | 1 | ※ ズッキーニのアリオリ 9 | 3 | 4 | ※ ズッキーニのアリオリ 10 | 4 | 1 | ※ 野菜のフリッター ※ はわかりやすくつけただけで、実際のテーブルデータではないです。 vegetables vegetable_id | name 1 | ずっきーに 2 | おりーぶ 3 | とまと 4 | にんにく ロジックはアンド検索で: 検索条件「ズッキーニ、トマト」で検索したら、  「ズッキーニとオリーブのトマトパスタ」と「ズッキーニとオリーブのトマトのマリネ」 検索条件「にんにく、ズッキーニ」で検索したら、  「ズッキーニとオリーブのトマトパスタ」と「ズッキーニのアリオリ」 が見つかる。 名前でLike検索はしない。 全く持って想像がつかないので教えてください。 ちょっと考えてみたんですが、↓では、1~4のレシピ全てが見つかってしまうのですよね…。 select recipe_id from recipe inner join recipe_ingredients using ( recipe_id ) inner join vegetables using ( vegetable_id ) where vegetables.name like '%ずっきーに%' or vegetables.name like '%にんにく%' ; もしかして、以下でしょうか? select recipe_id from recipe inner join recipe_ingredients using ( recipe_id ) inner join vegetables using ( vegetable_id ) where vegetables.name like '%にんにく%' INTERSECT select recipe_id from recipe inner join recipe_ingredients using ( recipe_id ) inner join vegetables using ( vegetable_id ) where vegetables.name like '%ずっきーに%'; なんとなくコストが高そうなので、他に方法はないでしょうか?

  • SQLの使用方法について(動的な結合条件の変更方法について)

    SQL Server2005を使用しています。 以下のような動作を実現したいのですが、どのようなSQLとなるのでしょうか? 以下のような構成のテーブルがあるとします。 テーブルA 分類1(PK) 分類2(PK) 名前 1     空文字   山田 1     1     山田太郎 1     2     山田花子 2     空文字   鈴木 テーブルB 番号(PK) 分類1 分類2 100  1   空文字 101  1   1 外部から受け取るパラメータはテーブルBの番号です。 次の番号を受け取った際に、以下の結果を取得したいのですが、 どのようなSQLとなるのでしょうか? 番号100 ↓ 山田 山田太郎 山田花子 番号101 ↓ 山田太郎 以下の様なSQLを作成して試してみたのですが、番号2をJOINの条件として指定しているため、 番号100の時に望む結果を得ることが出来ませんでした。 SELECT   * FROM   テーブルA AS A LEFT JOIN (   SELECT     *   FROM     テーブルB   WHERE     番号 = パラメータ ) AS B ON  A.分類1 = B.分類1 AND A.分類2 = B.分類2 サブクエリのB.分類2が空文字の場合は、JOINの条件から省くようなことは可能なのでしょうか?

  • ACCESS まとめて表示するクエリについて

    商品の売上データ・仕入データが個別にあります。 商品には大中小の分類があり、各分類は2ケタのコードです。つまり、 (1) 大分類/中分類/小分類/仕入金額 01/02/05/1,000 という構成のデータと (2) 大分類/中分類/小分類/売上金額 01/02/05/1,250 という構成のデータとがあるわけです。この2つをExcelデータで持ってて、データが大量なのでAccessに取り込み、最終的には 大分類/中分類/小分類/仕入金額/売上金額 01/02/05/1,000/1,250 というように、仕入金額と売上金額を一纏めにして表示したいのです。 ここで、上記(1)を仕入テーブル、(2)を売上テーブルとし、 SELECT 大分類,中分類,小分類,仕入金額,売上金額 FROM 仕入,売上 WHERE 仕入.大分類=売上.大分類 AND 仕入.中分類=売上.中分類 AND 仕入.小分類=売上.小分類 とクエリを作ってみたら、各テーブルのデータが数千件になっただけで、物凄くクエリの動きが遅くなりました。 大中小分類の一致を、WHEREでなくINNER JOINで記述してみても、遅くなります。 最初のテーブル作成からして、間違ってるでしょうか?いい案はないでしょうか?

  • ACCESS2000検索の指示

    ACCESS2000は超初心者です。 先日から取引先住所録を作り始めました。 テーブルには「取引先住所録」という名前で 取引先住所録ID、略称、会社名、部署名、氏名、郵便番号、住所、TEL、FAX、携帯、メールアドレス、備考 という、12項目を作りました。 略称は例えば「なにぬねの株式会社」であれば「ナ」というように、頭文字をカタカナ1文字で分類しています。 フォームは完成しています。 やりたいことはフォームに略称を手入力する欄を作っておき、その略称に値する会社名と氏名をコンボボックスに表示させ、そのリストからクリックしたものの情報を表示したいと考えております。 何処にどの様に指示をすればいいのか判らないのです。 よろしくお願いいたします。

  • ACCESSを活用して商品変動を追いたい(別2)

    こちらのベストアンサーについて、 http://okwave.jp/qa/q8783133.html 以下は氏名、電話番号をKEY(該当者の一致条件)としていましたが、電話番号のみにした場合、いただいた構文がどこが変わるのでしょうか。 こちらは、氏名、電話番号がKEY(これを電話番号だけをKEYにしたい)。 ↓ SELECT T1.受付日, T1.受付日-T2.受付日 AS 切り替え, T1.氏名, T1.電話番号, T1.商品コード, T1.商品名, T1.数量, T1.価格 FROM (SELECT Q1.* FROM ★★ AS Q1 INNER JOIN (SELECT 氏名, 電話番号 FROM ★★ GROUP BY 氏名, 電話番号 HAVING Min(商品コード & 商品名)<>Max(商品コード & 商品名) ) AS Q2 ON Q1.氏名=Q2.氏名 AND Q1.電話番号=Q2.電話番号 ) AS T1 LEFT JOIN (SELECT DISTINCT Q1.受付日, Q1.氏名, Q1.電話番号 FROM ★★ AS Q1 INNER JOIN (SELECT 氏名, 電話番号 FROM ★★ GROUP BY 氏名, 電話番号 HAVING Min(商品コード & 商品名)<>Max(商品コード & 商品名) ) AS Q2 ON Q1.氏名=Q2.氏名 AND Q1.電話番号=Q2.電話番号 ) AS T2 ON T1.氏名=T2.氏名 AND T1.電話番号=T2.電話番号 AND T1.受付日>T2.受付日 WHERE T2.受付日 Is Null OR (T2.受付日= (SELECT Max(受付日) FROM ★★ WHERE 氏名=T1.氏名 AND 電話番号=T1.電話番号 AND 受付日<T1.受付日) AND Exists (SELECT 1 FROM ★★ WHERE 受付日=T2.受付日 AND 氏名=T1.氏名 AND 電話番号=T1.電話番号 AND 商品コード & 商品名<>T1.商品コード & T1.商品名)) ORDER BY T1.氏名, T1.電話番号, T1.受付日;

専門家に質問してみよう