• ベストアンサー

ユニオンクエリで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」と入力したらちゃんと思い通りに動作します。 ユニオンクエリで条件抽出は不可能でしょうか? よろしくお願いします。

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

  • ベストアンサー
  • 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