- ベストアンサー
2つの検索結果を繋げたい
毎度お世話になります。 2つの異なるテーブルから 同じような結果をselectするのですが 可能ならば一発のSQL文で結果を得たいと考えております。 以下のように繋がった結果を得ることは可能でしょうか? ご教示いただければ幸いです。 宜しくお願いいたします。 A表へのselect結果1 あ | い ------------- (1) | (1) (1) | (1) B表へのselect結果2 あ | い ------------- (2) | (2) (2) | (2) 本来ほしい結果 あ | い ------------- (1) | (1) (1) | (1) (2) | (2) (2) | (2) ※単純に繋がった結果を得られれば満足です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- SUPER-NEO
- ベストアンサー率38% (706/1857)
- chukenkenkou
- ベストアンサー率43% (833/1926)
関連するQ&A
- PL/SQLで…SQLの実行結果を変数を格納する方法
毎度お世話になります。 SQL文の実行結果を変数に格納する方法がわからず困っております。 ご存知の方が居られましたらご教示いただきたい所存です。 常に1つの値しか返さないようなSQL文なので 変数V number := 'select count(B列) from B表'; みたいな書き方はで 入るか見てみようと思ったのですが コンパイルはできるものの、 実行すると「文字から数値への変換エラー。が発生しました」と なって上手くいきませんでした。 'select count(B列) from B表'が単なる文字列として解釈されて エラーになっているのだとは思うものの 正しい書き方がわからないのでよろしくお願いいたします。
- ベストアンサー
- Oracle
- SQLでlike検索条件を副問い合わせ結果にしたい
SQLでlike検索する際、検索キーワードを副問い合わせの結果文字列とする方法があればご教示下さい。 イメージでは、、、 select A1列 from A表 where A1列 like '(select B列 from B表 where 条件)'; みたいなのが可能であればいいのですが。。。( 宜しくお願いします。
- 締切済み
- Oracle
- SQLの結果でWindowsコマンドを実行
毎度お世話になります。 SQL文の実行結果をもとにWindowsコマンドを実行したいのですが方法がわからず困っております。 ご存知の方がおられましたらご教示いただれば幸いです。 まず実行するSQLは select foldername列 from A表; foldernameは、複数行の結果が返ってきます。 この帰ってきた結果を元に、Winddowsのフォルダー(ディレクトリ)を削除するコマンド > rmdir c:\abc\foldername を発行して、c:\abcフォルダー配下にあるfoldernameと同じ名前のフォルダーを削除 することを考えています。foldernameは複数ありますので、ループ処理も必要です。 基本的な質問で恐縮ですが、何卒よろしくお願いします。
- 締切済み
- Oracle
- 複数テーブルでの件数検索について
Oracle上の2つのテーブルからの条件でマッチする件数をSQLで作成しています。 内容としては、テーブルAの区分=1 かつ テーブルBの種別がスペースの件数です。 テーブルAの該当するデータは10件中3件、テーブルBの該当するデータは50件中15件で、本来両方がマッチするのは2件です。 SELECT COUNT(*) FROM テーブルA,テーブルB WHERE テーブルA.区分 = '1' AND テーブルB.種別 = ' ' ; 上記のSQL文で件数をカウントしたのですが、どうも結果では30件とカウントされてしまいます。 なんとか2件として結果を出したく、参考資料を調べているところなのですが、今のところ参考になる文献が見つからず悩んでます。もし簡単にカウントできるSQLがあったり、分かる方がいれば手助けして頂きたいと思い、今回投稿しますのでご教授賜りたく思います。よろしくお願いします。
- ベストアンサー
- Oracle
- SQL内でループさせるような検索文
以下の(1)のようなデータがあった場合、一つのSQL文で(3)の表が 取得できる方法はございますでしょうか? (1)table T_SAMPLE | UID | FLAG | CREATE_DATE | ------------------------------------------------ | 000 | A | 2009-01-26 00:00:00 |★ | 000 | A | 2009-01-26 00:00:10 | | 000 | B | 2009-01-26 00:00:20 | | 002 | A | 2009-01-26 00:00:05 |★ | 002 | B | 2009-01-26 00:00:13 | | 002 | A | 2009-01-26 00:01:00 | | 002 | B | 2009-01-26 00:02:02 | | 003 | B | 2009-01-26 00:05:00 |★ | 004 | B | 2009-01-26 00:00:00 |★ | 004 | B | 2009-01-26 00:00:15 | | 004 | A | 2009-01-26 01:00:00 | | 005 | B | 2009-01-26 00:00:11 |★ | 005 | B | 2009-01-26 00:04:05 | (2)同じUIDがあった場合、CREATE_DATEが早い情報(上表★)を使用 | UID | FLAG | CREATE_DATE | --------------------------------------------------- | 000 | A | 2009-01-26 00:00:00 |★ | 002 | A | 2009-01-26 00:00:05 |★ | 003 | B | 2009-01-26 00:05:00 |★ | 004 | B | 2009-01-26 00:00:00 |★ | 005 | B | 2009-01-26 00:00:11 |★ (3)FLAGでカウント <= 取得したい結果 | COUNT(FLAG) | FLAG | -------------------------------- | 2 | A | | 3 | B | イメージとしては、 [処理a] select FLAG from T_SAMPLE where UID = '000' order by CREATE_DATE limit 0,1 ×それぞれUID とすると、上記(1)→(2)で select UID,[処理aの結果においてUIDに対応したFLAG] from T_SAMPLE group by UID という状態の結果が一度のSQLで取得できればよいと考えているのですが。 実際にこの処理を実施する際は、自由に指定されるCREATE_DATEの範囲で絞り込むため、別テーブルを作って、、、等の処理は避けたいのです。 最適な方法がございましたら、なにとぞご教示願います。
- ベストアンサー
- MySQL
- 検索結果件数を取りたいです。
環境は、php + mysqlで作ってます。 DBのテーブルに格納されている文字列をセレクト文で取り出して 対象件数が何個あるか知りたいです。 DBのテーブルに格納されている文字列はURLの文字列が入ってます。 例えば http://www.yahoo.com/ 確認のため、予め $obj = "http://www.yahoo.com/"; として、DBに入っているデータを書いておいて以下を実行しました。 $sql="select * from geturl where url=".$obj; $datas = mysql_query($sql , $db ); $num = mysql_num_rows($datas); echo $num; 結果: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/~~ といったエラーが出てしまいました。。。 今度は、予め数字を入れておいて実行してみました。 入れた文字は「123」です。 $obj = "123"; $sql="select * from geturl where url=".$obj; $datas = mysql_query($sql , $db ); $num = mysql_num_rows($datas); echo $num; 結果:正しく対象件数がブラウザに表示されてました。 数字だと正しく処理されて、英文字だとエラーになる原因がわかりません。。 アドバイスいただければ幸いです。 よろしくお願いします。
- ベストアンサー
- PHP
- SQL: select 結果のカラム結合
selectの結果(文字列)を結合ってできますか。 例えば以下のテーブルがあって、カラムAとBを結合した結果が欲しいのです。Aカラム-Bカラム という結果が欲しいのです。 (つなぎ文字はわかりやすければなんでも可) なんとかスマートに一つのSQLでできないでしょうか。 A | B | C ---+-----+--- 1 | aaa | testtest 2 | bbb | hogehoge SQL > select .... 期待する答え ans | C ---+-----+--- 1 -aaa | testtest 2-bbb | hogehoge
- ベストアンサー
- PostgreSQL
- SQLでの計算結果がおかしい
SQLで調和平均(もどき)を計算したいのですが、下のようなSQL文で計算した結果が正しく出ないのです。 select ID, 3 / ((1 / (A1 + 1) + 1 / (B1 + 1)) + 1 / (C1 + 1)) as HARMEAN from TABLE (各項に1を足しているのは、ゼロ除算を避けるための苦肉の策です) たとえば、A1=20, B1=10, C1=50 の場合、上記の結果が27.14と出ます。 (正しい計算結果は18.97のはずです) ちなみに、上とまったく同じ式をExcelに入れて計算させると、ちゃんと正しい結果が出ます。 何が原因なのでしょうか?
- ベストアンサー
- SQL Server
- 意味は同じはずなのに結果が違います。
SELECT * FROM テーブルA LEFT OUTER JOIN ( SELECT * FROM テーブルB WHERE テーブルB.列X IS NOT NULL) as テーブルB ON テーブルA.列A = テーブルB.列A SELECT * FROM テーブルA LEFT OUTER JOIN テーブルB ON テーブルA.列A = テーブルB.列A WHERE テーブルB.列X IS NOT NULL 上のSQLも下の同じ事をしてると思うのですが 上では検索結果が10件出た場合 下では0件になってしまいます。 SQL自体シンプルで間違っていないと思うのですがなぜでしょうか?
- 締切済み
- PostgreSQL
- 計算結果をCASE WHENで判断したとき、ELSEで計算結果をそのまま持ってくるSQL文法は?
SQL SERVER2005を使用しています。 テーブルAがあり、Aが持つフィールド「suuchi」には数値が入っているとします。 suuchiフィールドの値を計算して、その結果が0以上なら計算結果を。負の数なら0を出力するSQL文を書きたいのです。 CASE WHEN を使用して以下のSQLを書きました。 SELECT CASE WHEN ( suuchi*2 + 1 ) < 0 THEN 0 END FROM テーブルA; しかし、結果は計算結果が負の数の場合は「0」になりますが、0以上の場合が表示されませんでした。 理由は、CASE WHEN でELSEを省略した場合、結果がNULLになるためと思われます。 以下のSQLでは期待とおりの結果が得られます。 SELECT CASE WHEN ( suuchi*2 + 1 ) < 0 THEN 0 ELSE ( suuchi*2 + 1 ) END FROM テーブル; しかし、同じ計算式を2回書くのは今一正しくないように思えます。 CASE WHEN で計算結果を判断した場合、ELSEでは計算済みの結果を取ることはできないのでしょうか? 上は例として書いたので簡単な計算式ですが、実際私が業務で使用している計算式はかなり長いため できれば式を2回書くことを避けたいのです(SQL文が長くなるため)。 計算結果に一時的に別名をつけようとして、以下のようなSQL文を書いたのですが「AS 付近にエラーがあります」といわれます。 SELECT CASE WHEN ( suuchi*2 + 1 ) AS TMPFIELD < 0 THEN 0 ELSE TMPFIELD END FROM テーブル; 質問は2点です。 1) 計算式の結果をCASE WHEN で判断した場合、ELSEの時は計算結果を取得したい場合は、再度同じ計算式を書く必要がありますか? 2) 上の答えが「必要ない」場合、上記条件を満たすSQLの書き方をご教示いただけませんでしょうか? なお、質問文の文章、SQLServerの環境の記述不足、SQL文等で意味不明な箇所がありましたらご指摘ください。 以上です。よろしくお願いします。
- ベストアンサー
- SQL Server
お礼
アドバイスありがとうございました。 やっと、やりたいことが実現できました! この度はお忙しい中、誠にありがとうございました。