- ベストアンサー
SQLの発行方法
SQL文を発行する場合にはSQL文を変数に格納してExecuteメソッドで発行しますが、SQL文が2文になる場合(最初のSQL文であるデータを取得して、次のSQL文でそのデータを使って検索等を行うとき)にはもう一度上記の手続きを繰り返すしかないのでしょうか?。 あるいは、SQL文を長くして一文にまとめる(できる場合とできない場合があるように思うのですが)方法があるのでしょうか 一般的な処理方法を教えていただけないでしょうか
- unname1
- お礼率55% (91/164)
- Visual Basic
- 回答数4
- ありがとう数3
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
エンジンがACCESSの場合です。 SELECT 社員名テーブル.社員名フィールド FROM 社員名テーブル inner join 外出中社員情報テーブル on 社員名テーブル.社員コード = 外出中社員情報テーブル.社員コード where 外出中社員情報テーブル.ステータス = "外出中" でしょうか?
その他の回答 (3)
- tomotomo0906
- ベストアンサー率63% (7/11)
こんな感じではいかがでしょうか? SELECT 社員名テーブル.社員名フイールド FROM 社員名テーブル,外出中社員情報テーブル WHERE 社員名テーブル.社員コード = 外出中社員情報テーブル.社員コード AND 外出中社員情報テーブル.ステータス = '外出中' 「社員名テーブルと外出中社員情報テーブルを社員コードで連結させ、 外出中社員情報テーブルのステータスが'外出中'のデータのみ抽出」 というSQL文です。
お礼
回答ありがとうございます、解決の手がかりがつかめたように思います。 ありがとうございました。
- clavia
- ベストアンサー率50% (5/10)
相手のデータベースにもよりますが、以下の SQL 文でいかがでしょうか? select 社員名フィールド from 社員名テーブル as A left join 外出中社員情報テーブル as B on B.社員ID = A.社員ID where B.外出中フラグ = 1
お礼
回答ありがとうございます、解決の手がかりがつかめたように思います。 ありがとうございました。
- bin-chan
- ベストアンサー率33% (1403/4213)
> SQL文を長くして一文にまとめる サブクエリ(副問合せ)で良いのでは? 具体的にはどのようなSQLなんでしょうか? 文末に「継続指定」があると改行していても良いのですが。 strMySQL = "select 氏名コード,氏名 from tbl社員 " _ & "where 氏名コード in (" _ & " select B.氏名コード from tbl異動履歴 " _ & " where b.何かの条件 " _ & ");" のような書き方も有りです。
補足
早速の回答ありがとうございます >具体的にはどのようなSQLなんでしょうか? SQLといいますか、(そもそもSQLで処理をすることが正しいかの判断もつかないのですが。)したい処理は下記のような内容です。 VBのデータコンボボックスに「社員名テーブル」の「社員名フイールド」を表示したいのですが、ここに表示する社員名を「外出中社員情報テーブル」を検索して外出中の社員だけ表示したいのです。 処理方法自体が試行錯誤の段階なのですが、現時点では上記方法で抽出したビューかテーブルをデータコンボボックスに表示しようと思っているのですが、データコンボボックスではうまく実現できないように感じています いずれにせよ社員名テーブルから外出中をキーワードにして社員名を絞り込む作業をしなくてはいけないと思っているのですが・・・。 もし、根本的に考え方が間違っているようでしたら「その処理の場合は私ならこうする」という考え方だけでも示していただければと思います。
関連するQ&A
- SQL文を文字型変数に格納し、EXECUTEで発行する方法のことを?
いつもお世話になっております、ありがとうございます。 SQL文を文字型変数に格納し、EXECUTEで発行する方法のことを何とか、といったと思うのですが、ド忘れしてしまいました。 あいまいな記憶では「外部○○」とか、そんな感じだったと思うのですが・・・ よろしくお願いいたします。
- ベストアンサー
- SQL Server
- DBMS_SQL.EXECUTEの問合せ結果件数
DBMS_SQL.EXECUTE()で動的SQLを発行したとき、 問合せ結果の件数は、どのようにすれば取得できるでしょうか。 できればSELECT COUNT(*)は発行しないで行いたいです。 動的SQLを発行した際に、取得結果が0件もしくはNULLが帰ってきた場合に例外処理を行いたい為です。 どなたかご存知の方いらっしゃいましたら、 ご教示の程宜しくお願い致します。
- ベストアンサー
- Oracle
- perlからsqlを実行した結果を取り出したい。
perlからsql文を発行し、実行した結果を変数に 格納したいのですが、どうしていいのかわかりません。 初歩的な質問で申し訳ありませんが、よろしくお願いします。
- ベストアンサー
- Perl
- PATH を返してくれるような SQL 文の書き方について
DBサーバ+APサーバの構成です。 APサーバで動くプログラムより SQL 文を発行して、 SQLServer2005 のデータを取得できる環境にあります。 やりたいことは、BACKUP DATABASE 文を、APサーバのプログラム から発行し、DBサーバ上にバックアップデータを保存することです。 DBサーバのフォルダ構成が環境によってまちまちなので、 SQL文を投げて、DBサーバのフォルダを取得したいのですが、 SQLServer のシステムテーブルなどに格納されていたりは しないでしょうか。 表領域のフルパス名、SQLServer インストールフォルダなどを 取得できる方法があれば教えてください。 宜しくお願いします。
- ベストアンサー
- SQL Server
- 動的にSQLを作成し、値を取得する方法について
Pro*Cでテーブル名を動的に与え、カラムの1つであるシーケンス番号の最大値を取得しようとしています。 ネットで調べたところ、 EXEC SQL DECLARE S1 STATEMENT; sprintf(buf1, "実行するSQL文", ); EXEC SQL PREPARE S1 FROM :buf1; EXEC SQL EXECUTE S1 INTO :取得結果格納領域; という構文で出来るということがわかったのですが、最後のところで、取得結果格納領域に値が入りません(正確には初期値「0」が入ります)。 取得したいデータを直接SQL*PLUSで実行すると0ではない値となるのですが、どのようにすれば値が取得できるかをご教授いただければと思います。 実行するSQL文の中には「%s」を含んでおり、sprintfの第3引数でテーブル名を渡しているので、buf1の中身はそのままSQL*PLUSで実行できる内容となっています。 それぞれのEXEC SQLの後にSQL終了コード(sqlca.sqlcode)を取得しましたが、どれも0(正常終了)で終わっていました。 どうかご教授のほど、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- ODBC SQL ServerでSQLを発行したいのですが・・・
ODBC SQL ServerでSQLを発行したいのですが・・・ IDがそのまま表示されてしまっていたので、再度登録しなおしました>< ・実行SQL DECLARE @DATE DATETIME DECLARE @STARTDATE DATETIME SET @DATE = GETDATE() SET @STARTDATE = DATEADD(DAY,-7,@DATE) SELECT * FROM teble WHERE 配達開始日 >= @DATE AND 配達開始日 <= @STARTDATE 上記のようなSQLを発行しデータを取得したいのですが、実行結果に表示がされません。 どうしていいかわからず困っています。 頭のDECLARE文しか動いていないのではないんだろうかと思っています。 実行ツールはCommon SQL Envieron mentを使用しています。
- ベストアンサー
- SQL Server
- これも「SQLの発行」している事になるのでしょうか
accessの勉強をしていると、SQLの発行という言葉を良く見かけます。 しかし意味が良くわからないのでご教示いただきたいです。 -------------------------- SELECT テーブル1.* FROM テーブル1; -------------------------- 選択クエリとして、上記のSQL文を作り、保存し、 このクエリを開いただけでも 「SQLの発行」をした事になるのでしょうか? よろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- StatementクラスのexecuteQueryメソッドを使用したSQLの発行について
StatementクラスのexecuteQueryメソッドを使用したSQLの発行について教えてください。 JavaでMySQLのデータベースからデータを取得するため、 executeQueryメソッドを使用してSQLの発行を行ったのですが、select文が正常に実行されずに困っています。(where句の条件が引っかからずに困っています。) 【前提】 ・カラム「name」の値に「name(nameという文字)」が入っている状態。 ・INT型、CHAR型で定義されたカラムの値は取得できる ・VARCHAR型で定義された、カラムの値が取得できない 【状況】 VARCHAR型で定義された、カラムの値が取得できない場合というのが、java側で、 stmt.executeQuery("SELECT * from customer where name='name'") というようにSQL文を発行した場合です。 MySQLのコマンドプロンプトからダイレクトに投げた場合や、 またDBViewerを使用した場合は、Where句の「name='name'」で引っかかったデータが正常に返ってくるのですが、 Javaから発行した場合のみ「VARCHAR型で定義されているカラムの値が取れない」という状況なのです。 (考えられることとしては、SQL発行時「SELECT * from customer where name='name'」 の 「'name'」が、別の何かに変わっているのかな?(文字コードなどが関係しているのか?)など考えているのですが、解決できず困っております。) 一体どこに問題があるのでしょうか? (CHAR型、INT型のデータは正常にJava側で読めるのに、VARCHAR型の値をwhere句にした場合に限って、正常にデータ抽出できない、という点が腑に落ちないのですが・・・ SQLエラーを吐く訳ではなく、抽出条件が成立していない形なのです) 【実行環境】 ・Windows XP Pro ・eclipse3.4(all in one eclipse) ・Java1.6 ・TomCat6.0 ・MySQL5.0 (文字コード:UTF-8)
- ベストアンサー
- Java
- SQL文 複数条件の場合の書き方
初めて質問します。 下記のようなデータが存在します。 テーブルA NO DATE GYO 1 2010/12/01 1 1 2010/12/01 2 2 2010/12/01 1 2 2010/12/01 2 2 2010/12/01 3 3 2010/12/02 1 <= 4 2010/12/03 1 4 2010/12/03 2 上記データにて、<=の行の値を取得し変数へ代入したとします。 変数.NO =3 変数.日付 =2010/12/02 変数.GYO =1 上記、変数を元に1件前のレコードを抽出したいのですが SQL文でのいい方法がわかりません。 取得したいレコード 1 2010/12/01 1 1 2010/12/01 2 2 2010/12/01 1 2 2010/12/01 2 2 2010/12/01 3 どうかお願いいたします。
- ベストアンサー
- Oracle
お礼
補足の回答をありがとうございます、解決の手がかりがつかめたように思います。 ありがとうございました。