• 締切済み

SQLで取得したフィールドをSQL文として利用

お世話になっております。 MYSQLで sql_id (int PK) sql_data (text) のようなテーブル(sql_db)を持ち select sql_id from where (sql_data をsqlとして実行した結果 ) > 200 のように、フィールドから取得した値をSQLとして実行したりする方法はございますでしょうか。 ご教授よろしくお願いいたします。

みんなの回答

回答No.5

>mysqlの文法に関する質問です と言うのが、そもそも違う気がする。 >SQL文として利用 そもそもSQL文とは・・・ http://search.yahoo.co.jp/search?b=1&n=10&ei=UTF-8&fr=ie8sc&p=SQL%E3%81%A8%E3%81%AF http://e-words.jp/w/SQL.html http://sql.first-database.com/sql.html http://www.weblio.jp/content/SQL などと説明されている通り、 http://www.atmarkit.co.jp/fnetwork/tokusyuu/01sql99/sql99_0.html なので、これらか検索したり、調べても当然みつからない。 あなたが質問している内容は、No1~NO3で回答したとおり、DB個別の内容です。インタプリタとも言うべき(定義としては違うが)、SQLと言うより、インラインスクリプト、インタープリターレベルの話です。なので、MySQLのリファレンスを見ればいいだけの話。 http://dev.mysql.com/doc/refman/4.1/ja/variables.html などにあるように、検索された値や、ユーザーデーター(スクリプト設計者の)の格納先として、「ユーザー変数」なるものが設定できる。 http://dev.mysql.com/doc/refman/4.1/ja/language-structure.html (元の章) この辺のサイトにはアクセスと、他のRDBに関するSQLについて記述されている。参考にするといいでしょう。 大事なのは、DB上のトランザクションはなるべく小さくする。 これが鉄則です。これによって、DBへの負荷が小さくなり、次のDBに対するアクションもしやすくなり、すぐ受け付けてくれます。複雑な事は、クライアントツール行う。ビューなど沢山活用する。です。 これらをまもらないと、クライアントツール側で、よくデッドロックが発生します。DB側にも起きます。 http://www.pursue.ne.jp/jouhousyo/SQLDoc/Abort_SQL.html 上記のリファレンスが完璧ではないとしても、DB側で用意されている物で、できないのであれば、SQLで工夫する(No4さんのように)。それが、まず第一。 しかし、それも必ずしもいいとはいえない。目的が、ビュー作成なら、それでもいいかもしれないが、何かシステムを作る場合、ビルドアップ、バージョンアップなど、状況の変化に対応しきれない状態が多々出てきます。 プログラム言語のカプセル化とよく似ています。 数を沢山こなせば分かりますが、カプセルかは、単純であれば、在るほど、メンテナンスが容易で、使い回しがかなり効きます。 前述のインタプリターと言う点では http://dev.mysql.com/doc/refman/5.1/ja/stored-procedures.html にあるように「ストアドプロシージャとファンクション」などのように、どのDBにも内部インタープリターが用意されていることが多い。動作はビューと同じと考えればいい。SQLではなく完全にコマンドを羅列したスクリプト。これをSQLと、その結果を織り交ぜて、ビューとして構築できる。 http://dev.mysql.com/doc/refman/5.1/ja/call.html (例) もっとも良く活用されているのがOracleとマイクロソフトのSQLServerのインタープリタ。アクセスだとVBAとかのレベル。 つまり、前の結果を保存し、他の検索や、登録、削除に、生かしたい。と考えるのは、誰でも考える。単純なものなら、SQLレベルで達成できる場合もあるが、ほとんどがインタープリターによる設計が必要。 早いうちに、「ストアドルーチン(プロシージャとファンクション)」を把握しておくと、SQLで苦労する必要はない。 もっと言えば、それらのSQLやDBを使う側のクライアントソフトをどうするのか、考えておくことが必要。ずーとMySQLのコマンドラインツールで作業して、喜んでいるのか? と言うことです。

kaoru424233254
質問者

補足

記載されている内容を見ても、私には何を伝えたいのかがわかりませんでした。

回答No.4

質問の回答を探しましたが、見つかりませんでした。 私事で恐縮ですが、私の作ったツールは可能ですので、一応プログラムを書いてみました、よろしければお使い下さい。 100 PROGRAM=OUTPUT 200 BEGIN 300 =SQL_SET{W_SQL_DATA} 400 = {SELECT SQL_DATA FROM TEST_TABLE WHERE SQL_ID=1}; 500 DATA=SQL_ID{9} 600 SQL=SELECT SQL_ID FROM TEST_TABLE WHERE(?W_SQL_DATA?)>200

回答No.3

以上、どこから、どのように使うのか、ユーザーの環境や、シュチュエーションによって、変わる物。 その辺を理解してから、何に使うのか、どのような環境なのか、伝えてから質問しましょう。例えば、Webアプリで、サーバーはLinux とか、日常の業務を自動化したいとか・・・

kaoru424233254
質問者

補足

今回の質問は、mysqlの文法に関する質問です。webアプリを使うか、OS(サーバー)に何を使うか、具体的にどのような業務で使うかは決めておりません。

回答No.2
回答No.1

関連するQ&A