• ベストアンサー

ユニオンクエリでWHERE句を使うのは不可能でしょうか?

アクセス2003です。 (select * from Q1) UNION ALL (select * from Q2) UNION ALL (select * from Q3); WHERE (((番号) Like "*001")); としても 「SQLステートメントの後に文字が見つかりました。」 となってしまいます。 「番号」と言うフィールドは Q1、Q2、Q3どのクエリにもあり (select * from Q1) UNION ALL (select * from Q2) UNION ALL (select * from Q3); のみなら正常に動作します。 作成したユニオンクエリで「フィルタの対象」で「*001」と入力したらちゃんと思い通りに動作します。 ユニオンクエリで条件抽出は不可能でしょうか? よろしくお願いします。

noname#150256
noname#150256

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

  • ベストアンサー
  • noah7150
  • ベストアンサー率46% (116/251)
回答No.2

UNIONクエリーでSELECT文を()で包む記述をした事が無かったので 試してみて動きびっくりです。 私のいつもの書き方なら select * from ( select * from Q1 UNION ALL select * from Q2 UNION ALL select * from Q3 ) WHERE 番号 Like "*001"; です。 これなら動くと思いますが。 しかしスピードアップを考えるなら select * from Q1 WHERE 番号 Like "*001" UNION ALL select * from Q2 WHERE 番号 Like "*001" UNION ALL select * from Q3 WHERE 番号 Like "*001" かな? DBエンジンが中間レコードをどのように処理してるかは知りませんが 上だと一時的に全レコードが結合され 下だとそれぞれのSELECT文で条件抽出されたレコードのみが結合される と思うから

noname#150256
質問者

補足

どちらとも試してみましたらできました! 大変参考になりました。ご回答ありがとうございます。 ちなみに上の select * from ( select * from Q1 UNION ALL select * from Q2 UNION ALL select * from Q3 ) WHERE 番号 Like "*001"; の方で処理したら ユニオンクエリのマークではなく普通のクエリのマークになり、 デザインビューでの編集が可能になり テーブルのところに「%$##@_Alias」 と記入されているのですが そうゆうものなのでしょうか? 再度ご回答いただけたら幸いです。

その他の回答 (2)

  • tazukadan
  • ベストアンサー率68% (15/22)
回答No.3

横から失礼。 select * from ( select * from Q1 UNION ALL select * from Q2 UNION ALL select * from Q3 ) WHERE 番号 Like "*001"; ()の中のユニオン部は、クエリから見ると一つのテーブルとして考えられています。 3つのテーブルのレコードを連結した大きなひとかたまりから、「番号 Like "*001"」 に当てはまるものを抽出、ということですね。 別名と付けてやるとすっきり表示されますよ。 select * from ( select * from Q1 UNION ALL select * from Q2 UNION ALL select * from Q3 ) as 結合テーブル  ← 適当な名前をasの後に WHERE 番号 Like "*001";

noname#150256
質問者

お礼

大変参考になりました。ご回答ありがとうございます。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

提示されているSQLと実行されたSQLは一致していますか? (select * from Q1) UNION ALL (select * from Q2) UNION ALL (select * from Q3); WHERE (((番号) Like "*001")); UNIONの行末のセミコロンが「悪さ」していませんか?

noname#150256
質問者

補足

セミコロンが2つありましたね。 汗 正常に保存できるようになったのですが 「001」で終わるものが上に来るだけでフィルタはかかりません。 (全レコードが表示されてしまいます。) なぜでしょうか? ご回答ありがとうございます。

関連するQ&A

  • ユニオンクエリの場合は「Like [Forms]![フォーム1]![テキスト0]」とはできないのでしょうか?

    こんにちは。いつもお世話になります。 早速ですが T果物、T野菜、T花の3つテーブルでユニオンクエリを作成しました。 (各テーブルのフィールド名は「名前」です。) SQL文は ************************************************ SELECT 名前.名前, * FROM [select * from T果物 UNION ALL select * from T野菜 UNION ALL select * from T花 ]. AS 名前; ************************************************ です。 次に図1の様にテキストボックスに名前を入力してコマンドボタンを押してクエリを開く為のユーザーフォームを作成しました。 コマンド2を押したときは Private Sub コマンド2_Click() DoCmd.OpenQuery ("ユニオンクエリ") End Sub でユニオンクエリを開く動作を指示してあります。 ここまでなら問題なく作業ができるのですが テキストボックスに入力されている名前を含むものがコマンドボタンを押すと表示されるようにしたいのですが どうもユニオンクエリだとうまくいきません。 ユニオンクエリはデザインビューなら図2、 SQL文なら ************************************************ SELECT 名前.名前, * FROM [select * from T果物 UNION ALL select * from T野菜 UNION ALL select * from T花 ]. AS 名前 WHERE (((名前.名前) Like [Forms]![フォーム1]![テキスト0])); ************************************************ とすると、図3のようなエラーが出てしまいます。 ユニオンクエリではなく、普通のクエリ(選択クエリ?)なら 「Like [Forms]![フォーム1]![テキスト0]」の一文を入れても 問題なく作業できます。 何かアドバイスお願い致します。

  • ユニオンクエリで0と表示される。

    教えてください。 4つのテーブルをユニオンクエリでひとつにしたく以下のようにSQLに書きました。 SELECT ID AS フィールド1 ,No AS フィールド2, Remark AS フィールド3 FROM テーブル1 UNION ALL SELECT ID,No,Remark FROM テーブル2 UNION ALL SELECT ID,No,Remark FROM テーブル3 UNION ALL SELECT ID,No,Remark FROM テーブル4 フィールド2のNOには数字が入っているのですがフィールド2の列にはすべて0と表示されて数字がででてきません。ID(オートナンバー型)とRemark(短いテキスト型)はちゃんと表示されます。もとのテーブル1と2のNoは数値型 テーブル3と4のNoは短いテキスト型です。なにが原因でどうしたら数値が表示されるようになりますか?

  • ユニオンクエリをデザインビューで開くには?

    アクセス2010です。 T_テーブル1とT_テーブル2があり、 どちらもフィールド1に文字が入っています。(テキスト型です) クエリのSQLビューで SELECT * FROM T_テーブル1 UNION ALL SELECT * FROM T_テーブル2; として保存したらユニオンクエリが出来上がったのですが、 これをクエリのデザインビューで見るにはどうすればいいですか? 以前のバージョンならユニオンクエリをデザインビューで見れました。 でもやり方を忘れました。 該当のクエリをアクティブにしてデザインビューを選択しても SQLビューで開いてしまいます。

  • ユニオンクエリの保存方法

    SELECT * FROM 西クエリ UNION ALL SELECT * FROM 神戸クエリ; UNION ALL SELECT * FROM 東クエリ; UNION ALL SELECT * FROM 戸西クエリ; UNION ALL SELECT * FROM 西クエリ; UNION ALL SELECT * FROM 宮北クエリ; UNION ALL SELECT * FROM 尼クエリ; UNION ALL SELECT * FROM 馬クエリ; 以上のユニオンクエリを組みました これを ファイル名"森本"エクセルに保存したいのですが  命令文を指導願います

  • UNION ALLのように順番がありNULLを返す方法

    SQL初心者です。ACCESSデータベースに対するクエリを書いているのですが、 条件を配列として、その配列の順番に応じたSELECT文を書きたいのです。 SELECT * FROM access_db WHERE ID = '条件' UNION ALL SELECT * FROM access_db WHERE ID = '条件' UNION ALL SELECT * FROM access_db WHERE ID = '条件' UNION ALL... といった具合にSQL文を作成しているのですが、これでは見つからない条件がある場合に、行が繰り上がり条件を格納した配列とはずれが生じてしまいます。 見つからなかった場合にNULLまたはそれを表せる何かを抽出結果として組み込むことはできますか? SQL初心者のためUNION ALL程度しか近いものが見つけられなく、困っています。 どなたかよろしくお願いします。

  • ユニオンクエリ 「FROM 句の構文エラーです。」

    ユニオンクエリで複数のテーブルをつなげたいのですが SELECT * FROM 2003(T_案件) UNION ALL SELECT * FROM 2004(T_案件); とすると、 「FROM 句の構文エラーです。」 となります。 二つのフィールドの名前や数やデータ型は一緒のはずです。 何がダメなのでしょうか?

  • ユニオンクエリで期間指定抽出のSQL記述について

    いつもお世話になっております。 Access 2007で、「人名集計」テーブルと「資料送付」テーブルがあり、それぞれ、同一のフィールド名でテーブルが作成されております。 これを「発送日」フィールドの昇順で並べ替えながら結合するユニオンクエリを作成しました。 SELECT * FROM 人名集計 UNION ALL SELECT * FROM 資料送付 ORDER BY 発送日; とりあえず、上記のSQLでは動いていますが、このSQLに、 「発送日」の期間を指定して、抽出条件(パラメータ)を加えようとしていますが、うまくいきません。 WHERE句を使って、Between 「最初の日付を入力」 And 「最後の日付を入力」 のような文を SQLの何処にどのように記述すればよいのか、教えてください。 宜しくお願い申し上げます。

  • AccessのクエリでvbLfのみ抽出するには

    Access2010のクエリー(SQL)で vbLfかvbCrLfが含まれているレコードを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(10) & "*"; vbLfが含まれているレコードは抽出せず、 vbCrLfが含まれているレコードだけを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(13) & Chr(10) & "*"; でよいと思いますが、 vbCrLfが含まれているレコードは抽出せず、 vbLfが含まれているレコードだけを抽出するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。

  • Access 2000、ユニオンクエリーがどうしても出来ない!

    初歩の質問ですが、ユニオンクエリーが出来ません。 やりたい事は非常に単純です↓↓ 1:テーブル1、テーブル2、テーブル3があります。 2:各テーブルのデータ内容は様々ですが、共通項目として「品番」を持っています。但しテーブル1は「製品名」、テーブル2と3は「品番」という項目名になっています。 3:各テーブル内に、品番が幾つ入っているか、集計クエリでカウントします。項目名が違うので以下のように処理しました。  <テーブル1の場合>    フィールド|品番のカウント: 製品名|タイトル: "テーブル1"    テーブル |テーブル1     集  計 |カウント  <テーブル2(或いは3)の場合>    フィールド|品番のカウント: 品番|タイトル: "テーブル2"    テーブル |テーブル2     集  計 |カウント 4:3の集計クエリーを繋ぎ、テーブル1~3の品番件数を一気に表示させたい  <ユニオンクエリの内容>     SELECT *     from Q0_カウント_テーブル1     UNION select *     from Q0_カウント_テーブル2     UNION select *     from Q0_カウント_テーブル3; 5:私の予想としてはこんな風↓↓出てくるはずだったのですが・・・     品番のカウント| タイトル     ------------------------------        30   | テーブル1        20   | テーブル2        23   | テーブル3  6:結果は「From句の間違いです」と出ます。他の質問も見ましたが、自分のSQLのどこを直せば良いのかわかりません・・・教えてください!

  • アクセスのユニオンクエリについて

    アクセス初心者です。 見よう見まねでユニオンクエリを変更しているのですが、結果に日付設定以外のデータも含まれてしまいます。 【<データ>に含まれる次の条件結果を一括で抽出したい】 (1) 商品が 'バニラ'か、 'チョコ'か、'イチゴ'か、'バナナ'で、かつ、お届け日が180日前~30日後(今日から)までのもの。 (2) 商品が 'ヨーグルト'で、かつ産地に ‘北海道’を含む言葉が含まれている、かつ、お届け日が180日前~90日後(今日から)までのもの。 SELECT * FROMデータ WHERE [商品] = 'バニラ' OR [商品] = 'チョコ' OR [商品] = 'イチゴ' OR [商品] = 'バナナ' AND [お届け日] between Date()-180 and Date()+30 UNION SELECT * FROM データ WHERE [商品] = 'ヨーグルト' AND [産地] LIKE '*北海道*' AND [お届け日] between Date()-180 and Date()+90; どこを修正したら日付範囲が正しく抽出されるのか、教えていただけませんか??

専門家に質問してみよう